我需要每个ID有4条或更少的记录。一些ID有超过4条记录。我需要删除超出限制的记录,因此每个ID有4条记录
我尝试了很多东西,但我找到的唯一解决办法就是在ID超过4时删除所有记录。
这是我获取每个ID记录数量的代码:
select count(voorwerpnummer) AS plaatjes, voorwerpnummer
from Illustraties INNER JOIN items
ON Illustraties.itemID = items.ID
INNER JOIN tbl_voorwerp
ON items.ID = tbl_voorwerp.voorwerpnummer
group by voorwerpnummer
order by plaatjes DESC
我有这一行来删除每个itemID的额外记录:
DELETE FROM illustraties
WHERE plaatjefile NOT IN (select top 4 plaatjefile from illustraties where itemID = 110769395358)
AND itemID = 110769395358
现在我需要通过所有具有4条以上记录的itemID进行迭代。 这是如何获得超过4条记录的所有itemID:
WITH cte AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY itemID ORDER BY itemID) AS rn
FROM illustraties
)
SELECT distinct ItemID
FROM cte
WHERE rn > 4
任何人都可以让我通过所有那些itemID并执行删除声明吗? 或者进行查询,为每个ID添加一个rownumber 例如:一个ID有5条记录。 5条记录得到数字1到5.下一个ID有8条记录。 8条记录得到数字1到8 这样我就可以删除rownumber为5或更高的记录。
答案 0 :(得分:0)
希望您需要从Illustraties表中删除记录。您可以共享表结构以及该表的唯一键字段。
答案 1 :(得分:0)
鲜为人知的是,您可以从CTE或派生表中删除:
WITH cte AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY itemID ORDER BY itemID) AS rn
FROM illustraties
)
DELETE cte
FROM cte
WHERE rn > 4
我刚换了一行。您的ORDER BY
应该真正创建一个总订单。如果不是SQL Server有一些记录要删除的自由。可能是武断的,不符合你的利益。