我对这个热门问题有一个转折,并接受了答案:How can I SELECT rows with MAX(Column value), DISTINCT by another column in SQL?
我有一个结构相似的表,但我没有选择具有最高数据时间的行,而是要删除每个ID分组中不包含最大日期时间的所有行。查询应该使表格在行数方面变小。
我尝试在WHERE NOT EXISTS子查询中使用接受的答案选择查询,但是我收到错误“你无法指定目标表...来自From子句中的更新”
如何更改此项以删除不符合SELECT要求的行:
SELECT tt.*
FROM topten tt
INNER JOIN
(
SELECT home, MAX(datetime) AS MaxDateTime
FROM topten
GROUP BY home
) groupedtt ON tt.home = groupedtt.home AND tt.datetime = groupedtt.MaxDateTime
答案 0 :(得分:1)
ID是表格的主键
;with
GetResults
AS
(
SELECT tt.*
FROM topten tt
INNER JOIN
(
SELECT home, MAX(datetime) AS MaxDateTime
FROM topten
GROUP BY home
) groupedtt ON tt.home = groupedtt.home AND tt.datetime = groupedtt.MaxDateTime
)
DELETE GetResults
FROM topten tt LEFT JOIN GetResults ON tt.ID = GetResults.ID
WHERE GetResults.ID IS NULL
答案 1 :(得分:0)
id
是pk topten
:
delete
from topten tt1
where tt1.id NOT IN (
SELECT tt2.id
FROM topten tt2
INNER JOIN (
SELECT home, MAX(datetime) AS MaxDateTime
FROM topten tt3
GROUP BY home
) groupedtt ON tt2.home = groupedtt.home AND tt2.datetime = groupedtt.MaxDateTime
)
;