我想从表中删除日期字段有多个值的条目。
所以说我有Employee table - Id,Name,Date,Points
我想删除具有相同Date字段的条目,该字段应该是唯一的......只是为了清理 我需要保留一个日期条目并删除其余条目......如果可能的话,可以保留最近的条目....
任何人都可以建议更新查询来执行此操作吗?
答案 0 :(得分:4)
使用:
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。
答案 1 :(得分:2)
此查询查看具有相同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
答案 2 :(得分:1)
如果您的表具有主键,您可以通过dup条件将表连接到自身并过滤掉更多的PK,如下所示:
delete e2
from Employee e
join Employee e2 on e.Date=e2.Date
where e.ID < e2.ID
答案 3 :(得分:0)
你可以使用
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)