首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不同行上的字段之间执行DATEDIFF的查询

在不同行上的字段之间执行DATEDIFF的查询
EN

Stack Overflow用户
提问于 2019-05-09 23:31:53
回答 1查看 45关注 0票数 0

我需要将DATEDIFF添加到一个查询中,该查询提供当前行的字段和前一行的相同字段之间的小时数。

编辑:{我是否应该按ROUTED_DTM DESC对整个查询进行排序,以及在DATEDIFF DESC中进行ORDER by?

其中一行的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。}

代码语言:javascript
复制
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

我想在h.QUEUE_ID列之前添加一个DATEDIFF,它给出当前行的h.ROUTED_DTM与前一行的h.ROUTED_DTM之间的差异

目前,查询返回正确的结果,但是,我不确定如何将新的DATEDIFF添加到每一行。

EN

回答 1

Stack Overflow用户

发布于 2019-05-09 23:34:09

您可以使用lag()

代码语言:javascript
复制
datediff(day, routed_dtm, lag(routed_dtm) over (order by routed_dtm))

您可能还需要在window子句中使用partition by c.id

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56062917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档