我有一个oracle数据库表,有一些配置和一些时间。我需要从一列的时间中减去另一列的时间。这是一个例子
配置 | 配置名称 | 开始 | 结束 |
---|---|---|---|
1 | 名字 | 23 年 10 月 1 日 12:30:00 | 23 年 10 月 3 日 12:30:00 |
2 | 名字 | 23 年 10 月 3 日 12:29:00 | 23 年 10 月 5 日 12:30:00 |
3 | 名字 | 23 年 10 月 5 日 12:29:30 | 23 年 10 月 7 日 12:30:00 |
4 | 名字 | 23 年 10 月 7 日 12:29:50 |
一行的结束时间始终晚于下一行的开始时间。我想要计算的是间隙(例如,第 1 行结束和第 2 行开始之间的间隙是 60 秒,第 2 行结束和第 3 行开始之间的间隙是 30 秒)。配置是主键,配置名称在配置中是相同的。最后一行没有结束时间。
我尝试使用 max(end) 编写一些东西,其中配置名称是“name”,但它有点不稳定(我想是因为最终配置中没有值?)
我期待的是一个结果集,它提供一行结束与下一行开始之间的间隙,最好包括我们正在计算开始的行的配置名称,因为这实际上意味着“第 2 行花了 30 60 秒”开始'
您可以使用
LEAD
分析函数从下一行获取值,并从一个日期减去另一个日期以获得天数差异:
SELECT t.*,
"end" - LEAD("start") OVER (ORDER BY config) AS difference
FROM table_name t
或者,作为间隔:
SELECT t.*,
("end" - LEAD("start") OVER (ORDER BY config)) DAY TO SECOND AS difference
FROM table_name t