@skolom
Инженер

Как сделать выборку или какую функцию использовать?

Есть БД на MS SQL , в ней хранятся данные о заявках. Поставили задачу подсчитать, сколько проходит времени между открытием заявки и подтверждением ее заявителем, а так же сколько заявок выполняются дольше n дней. Пару дней уже голову ломаю, не как не выходит создать запрос. Пытался сделать это с помощью DATEDIFF, но не получается, время star и время end находятся в одном столбце.
Подскажите какую функцию использовать для этой задачи.
634427bcd3690199971977.png
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
SELECT заявки.заявка, 
       DATEDIFF( ss, заявки.дата, подтверждение.дата) AS ВСекундах,
       подтверждение.дата - заявки.дата AS КакДата
  FROM таблица AS заявки 
    INNER JOIN таблица AS подтверждение ON заявки.заявка = подтверждение.заявка
  WHERE (заявки.действие = 'Создание заявки') 
    AND (подтверждение.действие = 'Подтверждение заявки')

Или просто:
SELECT заявка, 
       CONVERT(VARCHAR, DATEDIFF( ss, MAX(дата), MIN(дата)) / 86400) AS Дней,
       CONVERT(VARCHAR, MAX(дата) - MIN(дата), 108 ) AS Часов
  FROM таблица
  GROUP BY заявка

Или, если действий больше двух, старая школа:
SELECT заявка, действие, дата,
       дата - 
       ( SELECT TOP 1 дата
           FROM таблица AS предыдущее
           WHERE (предыдущее.заявка = таблица.заявка) AND (предыдущее.дата < таблица.дата)
           ORDER BY дата DESC
       ) AS КакДата
  FROM таблица

Или, если действий больше двух, новые возможности:
SELECT заявка, действие, дата,
       дата - LAG( дата ) OVER(PARTITION BY заявка ORDER BY дата) AS КакДата
  FROM таблица
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы