我想从表格中删除其中包含多个Date字段值的条目。如何使用单个查询删除表中字段的重复值?
所以说我有Employee table - Id,Name,Date,Points
我想删除与同一日期字段中输入这应该是唯一的......只是清理 我只是需要保持为最新的一个条目,并删除其余.. 。如果可能,可能会保留最近的一个....
任何人都可以请建议更新查询来做到这一点?
我想从表格中删除其中包含多个Date字段值的条目。如何使用单个查询删除表中字段的重复值?
所以说我有Employee table - Id,Name,Date,Points
我想删除与同一日期字段中输入这应该是唯一的......只是清理 我只是需要保持为最新的一个条目,并删除其余.. 。如果可能,可能会保留最近的一个....
任何人都可以请建议更新查询来做到这一点?
用途:
DELETE FROM EMPLOYEE
WHERE id NOT IN (SELECT MAX(e.id)
FROM EMPLOYEE e
WHERE e.date = date
GROUP BY e.date)
的由于WHERE子句&仅返回一个包含聚合函数的列,所以GROUP BY不太可能是必需的,但它被包括在内以确保安全。这是假设当OP说日期字段时,SQL Server 2008是指DATE data type,而不是DATETIME。
如果你的表有主键,你可以通过DUP条件加入该表本身并筛选出更大的PK,类似如下:
delete e2
from Employee e
join Employee e2 on e.Date=e2.Date
where e.ID < e2.ID
可以使用
DELETE
From Employee
WHERE ID not in (select max(ID) from Employee group by Name)
如果最后一项是近期的日期,或者您可以使用此代码
DELETE
From Employee
WHERE ID not in
(select max(ID) from Employee e1
where Date=(select max(Date) From Employee where Name=e1.Name)
group by Name)
此查询着眼于用相同的ID,名称记录和积分和删除除最新版外
with cte as(
select id,Name, Date, Points,row_number() over(
partition by id,name,points order by date desc) as ind
from emp)
delete from cte where ind>1
你想要保留哪一个 - 最高或最低ID值的记录? – 2010-06-23 21:09:05
@OMG小马我想把最近的日期记录保存下来 – Vishal 2010-06-23 21:11:54
是id的PK吗? – 2010-06-23 21:19:36