首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何选择每个值任意两个连续行之间的最大时间差?

问如何选择每个值任意两个连续行之间的最大时间差?
EN

Stack Overflow用户
提问于 2019-10-10 03:25:18
回答 2查看 616关注 0票数 0

刚刚有了一个用户answer this correctly for TSQL,但现在想知道如何最好地在SQL Developer/PLSQL中实现这一点,因为没有DATEDIFF函数。

我要查询的表有一些'CODE‘值,在一个表'Occs’中自然可以有多个主键记录('OccsID')。对于每个OccsID,还有一个名为'CreateDT‘的datetime列。

我只想找出“Occs”中任何两个连续行之间的最大可能时间差异,每个“代码”。

EN

回答 2

Stack Overflow用户

发布于 2019-10-10 03:31:11

如果减去“下一个”日期和“这个”日期(使用LEAD分析函数),就会得到日期差。然后获取每个code的最大差值。如下所示:

代码语言:javascript
复制
with diff as
  (select occsid, 
          code, 
          nvl(lead(createdt) over (partition by code order by createdt), createdt) - createdt date_diff
   from test
  )
select code, 
       max(date_diff)
from diff
group by code;
票数 0
EN

Stack Overflow用户

发布于 2019-10-10 03:33:21

假设这个T-SQL版本可以为您工作(来自上一个问题)

代码语言:javascript
复制
SELECT x.code, MAX(x.diff_sec) FROM
(
  SELECT 
    code,
    DATEDIFF(
        SECOND,  
        CreateDT,
        LEAD(CreateDT) OVER(PARTITION BY CODE ORDER BY CreateDT) --next row's createdt
    ) as diff_sec
  FROM Occs
)x
GROUP BY x.code

最简单的选择就是将两个日期相减,得到天数的差值。然后,您可以乘以得到小时、分钟或秒的差值

代码语言:javascript
复制
SELECT x.code, MAX(x.diff_day), MAX(x.diff_sec)
FROM
(
  SELECT 
    code,
    CreateDT -
        LEAD(CreateDT) OVER(PARTITION BY CODE ORDER BY CreateDT) as diff_day,
    24*60*60* (CreateDT -
        LEAD(CreateDT) OVER(PARTITION BY CODE ORDER BY CreateDT)) as diff_sec

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

https://stackoverflow.com/questions/58310973

复制
相关文章

相似问题

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