刚刚有了一个用户answer this correctly for TSQL,但现在想知道如何最好地在SQL Developer/PLSQL中实现这一点,因为没有DATEDIFF函数。
我要查询的表有一些'CODE‘值,在一个表'Occs’中自然可以有多个主键记录('OccsID')。对于每个OccsID,还有一个名为'CreateDT‘的datetime列。
我只想找出“Occs”中任何两个连续行之间的最大可能时间差异,每个“代码”。
发布于 2019-10-10 03:31:11
如果减去“下一个”日期和“这个”日期(使用LEAD分析函数),就会得到日期差。然后获取每个code的最大差值。如下所示:
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;发布于 2019-10-10 03:33:21
假设这个T-SQL版本可以为您工作(来自上一个问题)
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最简单的选择就是将两个日期相减,得到天数的差值。然后,您可以乘以得到小时、分钟或秒的差值
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.codehttps://stackoverflow.com/questions/58310973
复制相似问题