【问题标题】:SQL: Move duplicates to another table where conditionSQL:将重复项移动到另一个表
【发布时间】:2016-06-01 13:55:06
【问题描述】:

我对 SQL 和 Stackoverflow 还很陌生,所以请原谅我的帖子的布局。 目前,我正在努力将以下工作流程放入可执行的 SQL 语句中:

我有一个包含以下列的表格:

  1. ID(不唯一)
  2. PARTYTYPE(1 或 2)
  3. 日期栏
  4. 其他几个不相关的列

现在我需要找到那些具有相同 ID 和相同 PARTYTYPE 但不是最新的观察(行),即 DATE 列中的日期小于给定 PARTYTYPE 组合的最新日期和ID。满足此条件的行需要移动到具有相同表方案的另一个表中才能归档。

在 SQL 中是否有一种高效而简单的方法来完成此任务? 找了很久,但是因为涉及到在特定条件下查找重复项并将其插入到表中,所以这是一个相当具体的问题。

这是我目前所拥有的:

INSERT INTO table_history
select ID, PARTYTYPE, count(*) as count_
from table
group by ID, PARTYTYPE, DATE
having DATE = MAX(DATE)

任何帮助将不胜感激!

【问题讨论】:

    标签: sql duplicates insert-into


    【解决方案1】:

    您描述 SQL 的方式几乎完全符合相关子查询:

    INSERT INTO table_history( . . . )
        select t.*
        from table t
        where date < (select max(date)
                      from table t2
                      where t2.id = t.id and t2.partytype = t.partytype
                     );
    

    【讨论】:

    • 谢谢戈登。但问题是我的 table_history(我猜在你的帖子中是 t2)还没有包含数据,也不应该影响行是否重复的决定。但是根据您的回答,我想我发现了一些可能有效的方法: INSERT INTO table select * fromtable as p1 where GOODTHROUGHDATE
    猜你喜欢
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多