Sql 使用分组依据和聚合条件删除
我有一个包含外键和日期时间戳的表。我想删除时间戳晚于最终时间戳当天开始的所有行,但要分别删除每个项目 从逻辑上讲,我想要这样的东西:Sql 使用分组依据和聚合条件删除,sql,sql-server,Sql,Sql Server,我有一个包含外键和日期时间戳的表。我想删除时间戳晚于最终时间戳当天开始的所有行,但要分别删除每个项目 从逻辑上讲,我想要这样的东西: DELETE FROM Entries WHERE StartTime > CONVERT(Date,MAX(StartTime)) GROUP BY ItemId; 但是我不能在DELETE中使用GROUP BY,也不能在WHERE条件中使用SUM() 我可以使用如下子查询一次删除一项: DELETE FROM Entries WHERE It
DELETE FROM Entries
WHERE StartTime > CONVERT(Date,MAX(StartTime))
GROUP BY ItemId;
但是我不能在DELETE中使用GROUP BY,也不能在WHERE条件中使用SUM()
我可以使用如下子查询一次删除一项:
DELETE FROM Entries
WHERE ItemId=@Id
AND StartTime > (
SELECT CONVERT(Date,MAX(StartTime)) FROM Entries
WHERE ItemId=@Id
)
但我想删除单个查询中所有项目的。如何实现这一点?对于您的查询,您可以使用
DELETE FROM E
FROM Entries E JOIN (
SELECT ItemId, MAX(StartTime) st from Entries GROUP BY ItemId)E2
ON E.ItemId=E2.ItemId
WHERE E.StartTime > CONVERT(Date,E2.st)
您可以将查询重写为不使用
@Id
:
DELETE e
FROM Entries AS e
WHERE StartTime > (
SELECT CONVERT(Date,MAX(StartTime)) FROM Entries ee
WHERE ee.ItemId=e.Id
)
@DasBinkenLight,但我想删除多个ItemID。我上面的查询只处理一个ItemId,对每个项目分别应用时间戳检查。我上面的查询一次只处理一个ItemId。没关系,我错过了您查询中的
@Id
参数。我编辑了你的查询,使之成为我在键入上一条评论时所认为的内容。