SQL:将重复项移动到另一个条件表

时间:2016-02-19 20:45:53

标签: sql duplicates insert-into

我是SQL和Stackoverflow的新手,所以原谅我的帖子布局。 目前,我正在努力将以下工作流放入可执行的SQL语句中:

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

  1. ID(非独特)
  2. PARTYTYPE(1或2)
  3. 日期栏
  4. 其他几个不相关的专栏
  5. 现在我需要找到具有相同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)
    

    任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您描述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
                 );