从表中删除具有特定不同值的行

时间:2015-08-27 19:03:50

标签: sql sql-server tsql

所以我有这个样本表

+----+------------------+-------+------------+------------+--------+
| ID | KeyAccountNumber | GList | StartDate  |  EndDate   |  Rate  |
+----+------------------+-------+------------+------------+--------+
|  1 |              100 | ABCD  | 01-01-2015 | 01-30-2015 | 100.00 |
|  2 |              101 | ABECD | 02-01-2015 | 02-28-2015 | 105.00 |
|  3 |              100 | ABCD  | 01-01-2015 | 01-30-2015 | 107.00 |
+----+------------------+-------+------------+------------+--------+

我需要完成的是针对给定的不同的KeyAccountNumber'和' GList'值,我需要删除重复StartDate和EndDate的位置(删除两行)。

所以在这种情况下,我需要删除带有ID 1和3的行,因为它们具有相同的KeyAccountNumber和相同的GList值以及StartDate和EndDate字段中相同的日期,甚至认为Rate字段不同。

因此,输出应如下所示:

+----+------------------+-------+------------+------------+--------+
| ID | KeyAccountNumber | GList | StartDate  |  EndDate   |  Rate  |
+----+------------------+-------+------------+------------+--------+
|  2 |              101 | ABECD | 02-01-2015 | 02-28-2015 | 105.00 |
+----+------------------+-------+------------+------------+--------+

实现这一目标的最佳方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:4)

DELETE t
FROM YourTable t
Group By KeyAccountNumber,GList,StartDate,EndDate
HAVING COUNT(*) > 1