首页 > 解决方案 > 试图在同一用户的两个日期之间显示超过一天的数据?

问题描述

我正在尝试在 Toad for Oracle 中创建一个查询,该查询允许我使用“已注册委托人”的主管类型来拉取他们以前和当前主管之间有超过一天差距的用户。

例如,如果用户有一个结束日期为 2019 年 10 月 20 日的主管,我希望看到 2019 年 10 月 21 日分配的主管。如果不是,那么我希望自 2019 年 10 月 22 日起显示这些异常,有一天的差距。如果显示日期“12/31/9999”,则表示主管是当前的。

SELECT DISTINCT a.AssocID, a.SupervisorAssocID, TRUNC(a.StartDate), 
   TRUNC(a.EndDate), a.SupervisorType
FROM TableName a
INNER JOIN (SELECT AssocID, StartDate, EndDate
            FROM TableName
           ) b ON a.AssocID = b.AssocID
WHERE a.StartDate != TRUNC(b.StartDate) 
   AND TRUNC(b.EndDate) >  a.StartDate
   AND a.StartDate != TRUNC(b.EndDate)
   AND a.SupervisorType = 'Registered Principal';

我希望只看到主管之间的间隔超过一天的用户。

样本数据图片

标签: sqloracle

解决方案


您可以使用LEAD分析函数来获取下一个开始日期:

SELECT *
FROM   (
  SELECT a.*,
         LEAD( startdate ) OVER (
           PARTITION BY AssocId
           ORDER BY StartDate ASC
         ) AS next_startdate
  FROM   tablename a
  -- WHERE SupervisorType = 'Registered Principal'
)
WHERE SupervisorType = 'Registered Principal'
AND   TRUNC( enddate ) + INTERVAL '1' DAY < TRUNC( next_startdate )

注意:不清楚您要过滤的位置SupervisorType;您的查询使它看起来应该是外部查询,但如果您只想考虑注册委托人之间的差异而不是任何其他类型的主管,它可能是内部查询。


推荐阅读