【问题标题】:SQL to find difference of dates - OracleSQL查找日期差异 - Oracle
【发布时间】:2019-11-17 23:33:52
【问题描述】:

我有一张桌子:

表1

tran_id    user_id    start_date    end_date
1          100        01-04-2018    02-04-2018
2          100        14-06-2018    14-06-2018
4          100        12-06-2018    12-06-2018
7          101        05-01-2018    05-01-2018
9          101        08-01-2018    08-01-2018
3          101        03-01-2018    03-01-2018

日期格式为DD-MM-YYYY

我需要找到由user_idstart_date 排序的天差。求日差的公式是前一个记录的end_date和下一个记录的start_date相减。

这是预期的输出:

tran_id    user_id    start_date    end_date       day_diff
1          100        01-04-2018    02-04-2018     71
4          100        12-06-2018    12-06-2018     2
2          100        14-06-2018    14-06-2018     0

3          101        03-01-2018    03-01-2018     2
7          101        05-01-2018    05-01-2018     3
9          101        08-01-2018    08-01-2018     0

如何在 SQL 查询中得到这个?

【问题讨论】:

  • "日期格式是 DD-MM-YYYY" - 你的意思是列类型不是 DATE 吗?为什么?
  • 是日期。在我的意思的问题中,格式是 DD-MM-YYYY。

标签: sql oracle date


【解决方案1】:

我认为:DATEDIFF function in OracleLAG function 结合使用应该可以帮助您。

【讨论】:

    【解决方案2】:

    使用函数lead() 查找下一个值,然后减去日期:

    select tran_id, user_id, start_date, end_date, nvl(nsd - start_date, 0) diff
      from (
        select t.*, lead(start_date) over (partition by user_id 
                                           order by start_date) nsd 
          from table1 t)
    

    demo

    【讨论】:

      【解决方案3】:

      您可以为此使用lead()。因为lead() 需要三个参数,所以您不需要子查询或处理null 值:

      select t.*,
             (lead(start_date, 1, start_date) over (partition by user_id order by start_date) -
              start_date
             ) as diff
      from t;
      

      【讨论】:

        【解决方案4】:

        对 Ponder Stibbons 给出的答案的小修正。差异以粗体突出显示。

        选择 tran_id, user_id, start_date, end_date, nvl(nsd - end_date, 0) diff 从 ( select t.*, lead(start_date) over (partition by user_id 按 start_date 排序)nsd 从 date_test t);

        问候 阿卡什

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多