如何用一列的时间减去另一列的时间

问题描述 投票:0回答:1

我有一个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 秒”开始'

sql oracle time
1个回答
0
投票

您可以使用

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
© www.soinside.com 2019 - 2024. All rights reserved.