Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблица с полями:
Время, состояние, имя оператора
Во время изменения состояния добавляется запись в таблицу
Требуется рассчитать общее время, которое оператор находился в определенном состоянии за день.
состояний около 5-7, соответственно в поле Состояние содержит начало действия и его конец (т.е. это две строки в таблице)
пример
10-00 пошел курить Миша
10-15 закончил курить Миша
10-30 начал работать Миша
11-00 пошел курить Миша
12-15 закончил курить Миша
16-00 закончил работать Миша
Нужно посчитать сколько времени сегодня Миша курил.
Неактивен
При такой структуре таблицы проще сделать это на клиенте на процедурном языке. Ну или функцию написать, которая курсором пройдёт по таблице и все посчитает.
Если sql'ем хотите, то лучше добавить еще одно поле, в котором будет окончание времени перекура. То есть как-то так:
10-00 10-15 Курение Миша
10-15 11-00 Работа Миша
Неактивен
Проблема в том, что этих состояний за день - где то 6, и в эти состояния переходит много раз. Т.е. само поле состояние имеет 12 вариантов.
Думаю, что тут цикл нужен.
Думаю, что в самом MySql такое не реализовать(
Отредактированно Libertos (22.11.2011 17:11:56)
Неактивен
в mysql нет циклов. но напишите функцию, которая курсором пройдёт по Вашей таблице и посчитает что нужно.
Неактивен
Не получится процедуру вставить, особенность системы.
Неактивен
Тогда на клиенте. Задача в такой постановке не очень решается sql-запросом, тут все равно процедурный подход нужен
Неактивен
Ну да, do wihle - это можно использовать в хранимых процедурах или функциях
А я имел в виду, что в рамках sql-запроса нельзя цикл сделать. Может быть можно как-то через пользовательские переменные сделать, но не факт, что получится и очень не рекомендую.
В-общем, Libertos, если не можете изменить структуру таблицы и нет возможности написать хранимую процедуру/функцию, то вытаскивайте данные на клиент, и там уже ...
Неактивен