我有一个包含以下列的表: 帐户,指示器,开始日期,结束日期 指标从N到Y经常(随机)变化。 当指标更新开始日期更改时,结束日期也是如此。 由于此表上其他标志的更改,开始日期和结束日期可能会发生变化,因此指标可能尚未更新,但开始日期和结束日期已完成。
我试图使用SQL隔离所有帐户记录,其中指标在帐户生命周期中从Y变为N,因为这绝不会发生
任何帮助表示赞赏
由于
答案 0 :(得分:0)
我认为您要做的是在下一条记录前进,以查看指标是否发生变化。如果您尝试隔离仅更改指示符的情况,则需要将比较扩展为包含记录中可能已更改的所有其他属性。如果您的表格非常大,那么完整地对表格进行操作可能会破坏资源。
由于我没有测试样本数据,因此我提供的SQL是根据您要完成的精神编写的。 ColA
和ColB
代表您的主键,或任何唯一标识表中记录的内容。窗口函数用于向前看一行,因此您可以将Indicator
的当前记录值与下一记录的Indicator
值进行比较:
SELECT ColA
, ColB
, Indicator
, StartDate
, EndDate
, MAX(Indicator) OVER (PARTITION BY ColA, ColB
ORDER BY StartDate
ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS NextIndicator
, MAX(StartDate) OVER (PARTITION BY ColA, ColB
ORDER BY StartDate
ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS NextStartDate
, MAX(EndDate) OVER (PARTITION BY ColA, ColB
ORDER BY StartDate
ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS NextEndDate
FROM MyTable
QUALIFY NextIndicator <> Indicator;