powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вычислить кол-во дней из дат по статусам
5 сообщений из 5, страница 1 из 1
Вычислить кол-во дней из дат по статусам
    #39861424
xwootx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Необходимо реализовать следующий запрос:

Имеется таблица, в которой в рамках одного ID формируются изменяющиеся статусы.

id Update_time Status
13 2017-06-08 16:16:20 2017-06-08 16:16:20 done
13 2017-05-30 12:23:31 2017-05-30 12:23:31 pending

Необходимо посчитать кол-во дней, сколько прошло с момента времени статуса в done до pending . Проблема в том, что в рамках одного ID может быть несколько таких итераций-переходов из статуса pending в done
...
Рейтинг: 0 / 0
Вычислить кол-во дней из дат по статусам
    #39861428
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия - пятая, восьмая?
Между указанными записями со статусами done и pending могут быть иные статусы?
...
Рейтинг: 0 / 0
Вычислить кол-во дней из дат по статусам
    #39861445
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-любому решение "влоб"

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT t1.id, SUM(TIMESTAMPDIFF(SECOND, t2.Update_time, t1.Update_time)) 
FROM source t1
INNER JOIN source t2 ON t1.id=t2.id 
                    AND t2.Update_time>t1.Update_time 
                    AND t2.Status='pending'
LEFT JOIN source t3 ON t1.id=t3.id 
                    AND t3.Update_time>t1.Update_time 
                    AND t2.Update_time>t3.Update_time 
                    AND t3.Status='pending'
WHERE t1.Status='done'
  AND t3.id IS NULL
GROUP BY t1.id



Ну и для версии 8+

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
WITH 
cte AS ( SELECT *, 
                LEAD(Status) OVER (PARTITION BY id ORDER BY Update_time ASC) nStatus,
                LEAD(Update_time) OVER (PARTITION BY id ORDER BY Update_time ASC) nUpdate_time
         FROM source
         WHERE Status IN ('pending','done') )
SELECT id, SUM(TIMESTAMPDIFF(SECOND, Update_time, n.Update_time)) 
FROM cte
WHERE Status='done'
  AND nStatus='pending'
GROUP BY id
...
Рейтинг: 0 / 0
Вычислить кол-во дней из дат по статусам
    #39861522
xwootx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Версия 8. Промежуточные статусы заведомо убираю, за ненадобностью. Условно - pending = начали обработку, по прошествию N-дней, завершили в статус done. Если необходима корректировка - произошел новый pending от более поздней даты done'а и заново формируют done более поздний.
...
Рейтинг: 0 / 0
Вычислить кол-во дней из дат по статусам
    #39861580
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xwootxВерсия 8Тогда второй запрос. Только опечатку там поправьте...
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вычислить кол-во дней из дат по статусам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]