我有一个棘手的问题。我需要从表中删除行,但只删除那些不是组中最大条目的行。这是一个示例:分组为(月,水果)。
Month | Fruit | Quantity
2013-01-01 | Apple | 5
2013-02-01 | Apple | 6
2013-03-01 | Apple | 7
2013-03-01 | Apple | 8
2013-01-01 | Banana | 5
2013-02-01 | Banana | 6
2013-02-01 | Banana | 7
正确的过渡应该是(每个月+水果组中只能保留最高数量):
Month | Fruit | Quantity
2013-01-01 | Apple | 5
2013-02-01 | Apple | 6
2013-03-01 | Apple | 8
2013-01-01 | Banana | 5
2013-02-01 | Banana | 7
(实际上,每个月每个水果我都需要有一个完整的日历水果表。因此,如果您设法通过添加2013-03香蕉来做到这一点,那不是问题,这是一个加号。)
表是一个声明的变量@tempTable
,最好直接从中删除。我使用SQL Server 2008 R2。
;WITH x AS
(
SELECT *, rn = ROW_NUMBER() OVER (PARTITION BY Fruit, Month ORDER BY Quantity DESC)
FROM @tempTable
)
SELECT * FROM x
--DELETE x
WHERE rn > 1;
当您对结果确定要删除的正确行感到满意时,请摆脱SELECT并取消注释DELETE。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句