sql - 试图在同一用户的两个日期之间显示超过一天的数据?
问题描述
我正在尝试在 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';
我希望只看到主管之间的间隔超过一天的用户。
解决方案
您可以使用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
;您的查询使它看起来应该是外部查询,但如果您只想考虑注册委托人之间的差异而不是任何其他类型的主管,它可能是内部查询。
推荐阅读
- php - 是否可以从总文本高度计算字体大小?
- javascript - ReactQuill Editor 中的 onChange 怎么处理?
- bash - 在 shell 扩展中使用“@a”运算符有什么用?
- docker - 在 vscode 中如何设置默认容器
- java - Moshi:解析假设为整数的 NULL 值
- .net - 成功安装后未找到 .NET SDK
- flutter - RangeError(索引):无效值:不在包含范围 0..13:14
- javascript - 检查对象数组中键的每个值是否相等或为空
- wordpress - 怎么插入图片
- WordPress 的古腾堡编辑器中的元素?
- api - 爱普生收据缓冲打印问题