SQL删除具有重复日期的行,条件是两列中的值

时间:2016-02-10 16:07:57

标签: sql sql-server-2012

我有大约1000个人的数据,每个人可以有多个行,有多个日期,列表示录取的程序和代码编号。

我需要每行包含一个不同的日期,所以我需要从我的表中删除重复日期的行。如果有多个行具有相同的日期,我需要保留具有最低代码编号的行。如果多个行具有相同的日期和相同的最低代码,那么我需要保留也在程序(prog)B中的行。例如;

| ID |     DATE   | CODE | PROG|            
--------------------------------
| 1  | 1996-08-16 | 24   |  A  |
| 1  | 1997-06-02 | 123  |  A  |
| 1  | 1997-06-02 | 123  |  B  |
| 1  | 1997-06-02 | 211  |  B  |
| 1  | 1997-08-19 |  67  |  A  |
| 1  | 1997-08-19 |  23  |  A  |

所以我想要的输出看起来像这样;

| ID |     DATE   | CODE | PROG|            
--------------------------------
| 1  | 1996-08-16 | 24   |  A  |
| 1  | 1997-06-02 | 123  |  B  |
| 1  | 1997-08-19 |  23  |  A  |

我努力想出一个解决方案,所以任何帮助都非常感谢!

Microsoft SQL Server 2012(X64)

2 个答案:

答案 0 :(得分:0)

您可以使用min()功能:(查看详情here

select ID, DATE, min(CODE), max(PROG)
from table
group by DATE

我假设你的表有一个有效的主键。但是,我建议您将ID作为主键。希望这会对你有所帮助。

答案 1 :(得分:0)

以下内容适用于您的测试数据

SELECT ID, date, MIN(code), MAX(prog) FROM table
GROUP BY date

然后,您可以使用此查询的结果来创建新表或填充新表。或者删除此查询未返回的所有记录。

SQLFiddle http://sqlfiddle.com/#!9/0ebb5/5