Запрос на выполнение DATEDIFF между полями в разных строках - PullRequest
0 голосов
/ 09 мая 2019

Мне нужно добавить DATEDIFF в запрос, который дает мне часы между полем текущей строки и тем же полем предыдущей строки.

РЕДАКТИРОВАТЬ: {Должен ли я ЗАКАЗАТЬ весь запрос по ROUTED_DTM DESC, кака также сделать ORDER BY в DATEDIFF DESC?

В одной строке у меня ROUTED_DTM '2019-05-07 15: 36: 13.000', в строке выше ROUTED_DTM '2019-05-01 14: 19: 52.000'.Я ожидаю, что AGE_IN_ROLE_DAY, AGE_IN_ROLE_HR, AGE_IN_ROLE_MIN, AGE_IN_ROLE_SEC будут 6, 1, 16 и 21 (по порядку).Однако я получаю 0, 0, 0, -2.}

SELECT c.ID,
       c.PAID_DT,
       DATEDIFF(dd,
                CASE WHEN c.ID_ADJ_FROM = '' THEN c.RECD_DT ELSE c.INPUT_DT END,
                CASE WHEN c.PAID_DT = '1/1/1753' THEN CONVERT(DATE,GETDATE()) ELSE c.PAID_DT END) + 1 AS DAYS_OLD
       DATEDIFF(dd, h.ROUTED_DTM, LAG(h.ROUTED_DTM) OVER (ORDER BY h.ROUTED_DTM DESC)) AS AGE_IN_ROLE_DAY,
       DATEDIFF(hh, h.ROUTED_DTM, LAG(h.ROUTED_DTM) OVER (ORDER BY h.ROUTED_DTM DESC)) AS AGE_IN_ROLE_HR,
       DATEDIFF(MM, h.ROUTED_DTM, LAG(h.ROUTED_DTM) OVER (ORDER BY h.ROUTED_DTM DESC)) AS AGE_IN_ROLE_MIN,
       DATEDIFF(ss, h.ROUTED_DTM, LAG(h.ROUTED_DTM) OVER (ORDER BY h.ROUTED_DTM DESC)) AS AGE_IN_ROLE_SEC,
       h.QUEUE_ID,
       h.QUEUE_DESC,
       h.ROLE_ID,
       h.ROLE_DESC,
       h.ROUTED_DTM

FROM table1 c
LEFT JOIN table2 h
    ON h.ID = c.ID
LEFT JOIN table 3 q
    ON q.QUEUE_ID = h.QUEUE_ID
LEFT JOIN table4 r
    ON r.ROLE_ID = h.ROLE_ID

ORDER BY c.ID, h.ROUTED_DTM DESC

Я хочу добавить DATEDIFF (s) перед столбцом h.QUEUE_ID, который дает разницу между текущей строкой h.ROUTED_DTM,и h.ROUTED_DTM предыдущей строки

В настоящее время запрос возвращает правильные результаты, однако я не уверен, как добавить новый DATEDIFF в каждую строку.

1 Ответ

0 голосов
/ 09 мая 2019

Вы можете использовать lag():

datediff(day, routed_dtm, lag(routed_dtm) over (order by routed_dtm))

Возможно, вы также захотите partition by c.id в предложении окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...