如何仅使用SQL在oracle中的SAME列中获取日期之间的差异

时间:2013-06-20 20:25:18

标签: sql oracle

如果我有一个简单的表,其列的类型为DATE:

START_DATE
06/02/2013 05:30:00 AM
06/05/2013 12:00:00 PM
06/10/2013 01:45:00 AM

是否可以将小时数转到下一个START_DATE,例如:

START_DATE                 HOURS_TO_NEXT_START
06/02/2013 05:30:00 AM     78.5
06/05/2013 12:00:00 PM     109.75
06/10/2013 01:45:00 AM     0

请注意,此结果也可以:

START_DATE                 HOURS_FROM_PREVIOUS_START
06/02/2013 05:30:00 AM     0
06/05/2013 12:00:00 PM     78.5
06/10/2013 01:45:00 AM     109.75

因为在一天结束时,小时数是我真正感兴趣的......

我很确定CONNECT BY参与递归遍历此列表以检查下一个开始日期的时差,但我认为我需要帮助实际执行此操作。我在CONNECT BY上看到的所有示例似乎都解决了遍历并发列表的问题。

2 个答案:

答案 0 :(得分:4)

尝试:

select start_date,
       (lead(start_date,1) over (order by start_date)-start_date)*24 
            as hours_to_next_start
from myTable

SQLFiddle here

答案 1 :(得分:0)

我想我刚刚找到了一个按ids组分组的答案

只需添加以下内容

即可
select start_date,
   (lead(start_date,1) over (*PARTITION BY ID* order by start_date)-start_date)*24 
        as hours_to_next_start
from myTable

再次感谢