SQL查询保留最多2个重复记录
我有以下数据:SQL查询保留最多2个重复记录
Name ID Date
Dave | 123 | 1-2-2011
Jim | 123 | 1-3-2011
Mike | 123 | 1-10-2011
Bill | 111 | 1-2-2011
Henry | 222 | 1-3-2011
Larry | 222 | 1-4-2011
我需要删除查询此降低:
Jim | 123 | 1-3-2011
Mike | 123 | 1-10-2011
Bill | 111 | 1-2-2011
Larry | 222 | 1-4-2011
即我想保留两个最新记录为每个ID。
我尝试这样做:
Delete FROM UserTable a
WHERE
Date <> (SELECT MAX(Date) FROM UserTable b WHERE a.ID = b.ID)
AND ID IN (SELECT ID FROM UserTable GROUP BY ID HAVING COUNT(*) > 1)
但只保留最新的1分独特的记录。
尝试类似的东西:
SELECT col1, col2, col3, COUNT(*)
FROM (SELECT DISTINCT * FROM your_TableName) AS T1
GROUP BY col2, col3
这是如何限制结果的,因此每个不同的col2值只有2条记录? – xQbert 2014-10-08 17:44:17
尝试使用下面这取决于你想请求尝试使用ASC或DESC
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;
尝试也是对你的SQL阅读了一下这个代码http://www.w3schools.com/sql/sql_orderby.asp
这将如何限制结果,以便每个不同的col2值只有2条记录? – xQbert 2014-10-08 17:43:41
您可以使用最大功能或更大/更小/等于符号来限制。并只选择你想要调用的列。希望我明白你在说什么并正确回答你的问题......你应该在这里找到更多的帮助http://www.w3schools.com/sql/ – 2014-10-09 05:58:32
分区可用于保留多个副本。
delete from UserTable
where (id, date) in (
select id,date from (
select id,date,
row_number() over (partition by id order by date desc) as temp
from UserTable)
where temp > 2
);
这个查询增加了行号为另一列由ID划分,按日期排序,然后删除那些具有行数大于2
我不是你问清楚的记录。 “2个最新记录是重复的”是什么意思?什么将记录定义为“独特”(不应该以某种方式通过唯一记录来记录所有记录?我不明白为什么Dave的记录不在输出中,而Bill则是。 – 2014-10-08 14:03:31
在问题中包含您的查询会有帮助 – 2014-10-08 14:04:22
我认为该帖子要求为每个(col2)最近的2个条目(col3)组成一个集合,但我不确定这个主题与此有什么关系,因为5可能因记录数量而异。 。 – xQbert 2014-10-08 14:06:40