Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2022, 11:18   #1
michael22
Новичок
Джуниор
 
Регистрация: 25.05.2022
Сообщений: 1
По умолчанию Расчет времени в sql-запросе

У меня есть таблица с большим числом id задач, всеми статусами по ним и временем постановки статуса. Строки с одним id могут повторяться из-за появления нового статуса по ним. Разброс ид от 1 до 5000 и более. Статусы могут быть: Requested, Taken, Hold, Unhold, Done, Not done, Cancel.
Столбцы таблицы:
1.task_id
2.status
3.date_time
Задача такая - для каждого id нужно рассчитать time между статусами по такой формуле: time = time(Done) - time(Taken) - SUM(date(Unhold) - date(Hold)).
В результате должна быть таблица с всеми возможными уникальными id и временем выполнения каждого. Далее эту таблицу буду проверять на слишком большое время с помощью кода python.
Прикрепляю скриншот из этой таблицы для одного ид.
Я пробую делать запрос типа:
SELECT
“task_id",
COUNT(“task_id") as count
FROM "HistoryStatus" WHERE deleted=false GROUP BY “task_id";

Но у меня не получается в COUNT(“task_id”) обращаться к времени разных статусов.
Изображения
Тип файла: jpeg 0694AF45-576E-434E-B3F7-532DEDD22B23.jpeg (28.1 Кб, 19 просмотров)
michael22 вне форума Ответить с цитированием
Старый 25.05.2022, 13:06   #2
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 491
По умолчанию

Почему у Вас одно и то же состояние Done две строки подряд?

Возможно у Вас структура таблицы не правильная, обычно у состояния (статуса) есть время начала и время окончания.
Естественно время окончания предыдущего состояния равно времени начала следующего состояния. Но при таком хранении всегда можно взять их разность и получить время для конкретного состояния без плясок с бубном.
Можно единожды пропатчить таблицу при помощи скрипта (а теоретически и одного SQL запроса) и работать дальше спокойно.

Последний раз редактировалось Valick; 25.05.2022 в 13:09.
Valick вне форума Ответить с цитированием
Старый 25.05.2022, 13:59   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
select task_id, status, datetime, 
      ( -- время СЛЕДУЮЩЕГО изменения 
         select min(datetime) from t as last 
         where last.task_id =t.task_id --для той же задачи
            and last.datetime>t.datetime  --только ПОследующие
      ) stoptime
from t
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
расчет затраченного времени между определенным рабочим времени кувикин Microsoft Office Excel 5 27.01.2019 02:10
расчет времени koda Microsoft Office Excel 1 21.02.2012 20:10
Отбор в запросе по времени Ameli1 Microsoft Office Access 1 29.05.2010 10:49
Расчет времени в PHP Hworang PHP 1 15.05.2010 12:47
Расчет в запросе! pobedin SQL, базы данных 22 03.09.2009 15:46