【问题标题】:SQL to Isolate records from updating data meeting criteriaSQL 将记录与满足条件的更新数据隔离开来
【发布时间】:2016-07-04 21:13:47
【问题描述】:

我有一个包含以下列的表格: 帐户、指标、开始日期、结束日期 指标每隔一段时间(随机)从 N 变为 Y。 当指标更新开始日期时,结束日期也会发生变化。 开始日期和结束日期可能会因为此表上其他标志的更改而更改,因此指标可能尚未更新,但开始和结束日期已经完成。

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

任何帮助表示赞赏

谢谢

【问题讨论】:

  • 我很难看到您可以通过查询来做到这一点。也许您可以添加一个触发器,将行添加到存档表中,以便您可以查询与当前值进行比较的结果?或者考虑限制以阻止这种情况发生?
  • 我没有得到你想要的,你能添加一些示例行和预期结果吗?

标签: sql teradata


【解决方案1】:

我认为您正在尝试做的是在下一个记录之前达到峰值,以查看指标是否发生变化。如果您试图隔离仅指示符发生变化的情况,则需要扩展比较以包括记录中可能已更改的所有其他属性。如果您的表非常大,则对整个表运行此操作可能会消耗资源。

由于我没有要测试的示例数据,因此我提供的 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2018-07-27
    • 2019-07-30
    相关资源
    最近更新 更多