SQL将隔离记录与更新符合条件的数据隔离开来

时间:2016-07-04 21:13:48

标签: sql teradata

我有一个包含以下列的表: 帐户,指示器,开始日期,结束日期 指标从N到Y经常(随机)变化。 当指标更新开始日期更改时,结束日期也是如此。 由于此表上其他标志的更改,开始日期和结束日期可能会发生变化,因此指标可能尚未更新,但开始日期和结束日期已完成。

我试图使用SQL隔离所有帐户记录,其中指标在帐户生命周期中从Y变为N,因为这绝不会发生

任何帮助表示赞赏

由于

1 个答案:

答案 0 :(得分:0)

我认为您要做的是在下一条记录前进,以查看指标是否发生变化。如果您尝试隔离仅更改指示符的情况,则需要将比较扩展为包含记录中可能已更改的所有其他属性。如果您的表格非常大,那么完整地对表格进行操作可能会破坏资源。

由于我没有测试样本数据,因此我提供的SQL是根据您要完成的精神编写的。 ColAColB代表您的主键,或任何唯一标识表中记录的内容。窗口函数用于向前看一行,因此您可以将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;