【问题标题】:LEAD Function - OracleLEAD 功能 - 甲骨文
【发布时间】:2019-01-17 10:58:21
【问题描述】:

我想比较一个开始日期和一个结束日期:

示例:

  1. start_date: 2017-12-13 00:00:00    End_date: 2017-12-13 09:44:00
  2. start_date: 2017-12-13 09:44:00    End_date: 2017-12-13 16:19:00
  3. start_Date: 2017-12-13 16:19:00    End_date: 2017-12-18 00:00:00

我想比较 start_date 第 2 行和 end_date 第 1 行。如果它们不匹配,请执行一些操作。下面的主要功能没有给我想要的东西。请插话并提供帮助。一旦我的查询开始工作,我就会把它放在一个循环中并遍历整个表。谢谢

    SELECT start_Date, end_date,
      LEAD (start_Date, 1) OVER (ORDER BY start_Date) AS next_start_DAte
      from    my_table
      where   start_date >= '2017-12-01' 
      AND     END_DATE < '2018-08-01'
      AND     FILE_ID IS NULL
      ORDER BY UNIT_ID, START_DATE;

【问题讨论】:

  • 嗯,你想要什么?想要的结果真的很有帮助。

标签: sql database oracle plsql


【解决方案1】:

您可以只使用not exists 来查找与“下一个”行不完全匹配的行:

select t.*
from my_table t
where not exists (select 1
                  from my_table t2
                  where t2.start_date = t.end_date
                 );

这将始终返回表格的最后一行,但该行满足您描述的条件。

【讨论】:

    【解决方案2】:

    您可以使用以下查询,

    SELECT START_DATE ,END_DATE, 
    --If they dont match do something. 
    case when  trunc(next_date) <> trunc(end_date) then 1 else 2 end dosomething 
    FROM (
    SELECT leadtest.*, lead(start_date, 1) over (order  by start_date) next_date FROM leadtest)
    ;
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 2011-07-19
      • 2014-09-11
      • 2011-06-15
      相关资源
      最近更新 更多