【问题标题】:SQL - delete rows where only one column changesSQL - 删除只有一列更改的行
【发布时间】:2018-04-27 18:40:31
【问题描述】:

我在 SQL 中有一个大表,其中的有效日期列应在其他列之一更改时更新。但是,由于某种原因,有许多行的有效起始日期发生了变化,但其他值没有发生变化。例如:

CODE    NAME    EFFECTIVE_FROM
CCWA    Oak     1999
CCWA    Willow  2001
CCWA    Willow  2004

如何删除有效起始日期更改未提供任何信息的行。例如上表的第三行。

这些表非常大,所以我更喜欢使用 SELECT 语句而不是 DELETE 或 ALTER,它们似乎很慢。

非常感谢任何帮助!

【问题讨论】:

    标签: sql select


    【解决方案1】:

    我相信您正在寻找:

    SELECT Code, Name, MAX(EFFECTIVE_FROM)
    FROM myTable 
    GROUP BY  Code, Name
    

    【讨论】:

    • 谢谢!我想我想太多了!
    【解决方案2】:

    由于是较晚的日期不添加任何信息,因此您要选择最小日期值。

    SELECT Code, Name, MIN(EFFECTIVE_FROM)
    FROM CodeTable 
    GROUP BY Code, Name
    

    【讨论】:

      【解决方案3】:

      试试这个:

      SELECT code, name, max(EFFECTIVE_FROM) 
      FROM tablename
      GROUP BY code, name                                      
      

      【讨论】:

        【解决方案4】:

        您想使用lag()。没有重复的结果集:

        select t.*
        from (select t.*,
                     lag(code) over (order by effective_from) as prev_code,
                     lag(name) over (order by effective_from) as prev_name
              from t
             ) t
        where (prev_code <> code or prev_code is null) and
              (prev_name <> name or prev_name is null);
        

        这假设codename 永远不是NULL。这很容易融入逻辑(但它使where 子句有点复杂)。

        【讨论】:

          【解决方案5】:

          您的问题并没有明确您想要达到的实际结果:如果您想从表中永久删除元素,您需要使用 DELETE,如果您的目标只是过滤掉您描述的重复项,您可以使用一个 SELECT(元素将保留在表中)。

          您考虑使用 DELETE 的事实使我认为这种“重复”(日期除外)是不可取的。 在这种情况下,您还可以考虑添加一个触发器,以在信息字段(除 EFFECTIVE_FROM 之外的所有字段)未更改时阻止插入,这样只有有趣的数据更改才会生成新行。

          然后您可以执行一次性操作,删除所有不反映任何数据更改的重复元素(操作要在夜间执行,或者当系统负载较低或没有人使用它时,如果你输入的表格真的很大)。

          这种解决方案改变了这张表的性质,实际上你丢失了更新的历史信息而没有真正的数据变化。仅当您的目标不需要这些信息时才考虑此解决方案。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-12-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-02-21
            • 2022-07-05
            • 1970-01-01
            相关资源
            最近更新 更多