我有大约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)
答案 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