我是SQL和Stackoverflow的新手,所以原谅我的帖子布局。 目前,我正在努力将以下工作流放入可执行的SQL语句中:
我有一个包含以下列的表:
现在我需要找到具有相同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)
任何帮助将不胜感激!
答案 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
);