首页 > 解决方案 > 删除重复的 SQL

问题描述

我有表:

╔════╤════════════╗
║ id │ date       ║
╠════╪════════════╣
║ 1  │ 2001-08-01 ║
╟────┼────────────╢
║ 1  │ 2001-09-02 ║
╟────┼────────────╢
║ 1  │ 2001-09-02 ║
╟────┼────────────╢
║ 1  │ 2001-09-01 ║
╟────┼────────────╢
║ 2  │ 2000-01-01 ║
╟────┼────────────╢
║ 3  │ 2000-09-01 ║
╚════╧════════════╝

并希望使用代码接收最大日期:

SELECT tt.*
FROM data tt
inner join(
SELECT id, max(data) as lastDate
FROM data
GROUP BY id) groupedtt
ON tt.id = groupedtt.id AND tt.data = groupedtt.lastDate

但是通过这段代码我得到了重复的值,比如

╔════╤════════════╗
║ id │ date       ║
╠════╪════════════╣
║ 1  │ 2001-09-02 ║
╟────┼────────────╢
║ 1  │ 2001-09-02 ║
╟────┼────────────╢
║ 2  │ 2000-01-01 ║
╟────┼────────────╢
║ 3  │ 2000-09-01 ║
╚════╧════════════╝

我应该改变什么来获得没有重复的表格:

╔════╤════════════╗
║ id │ date       ║
╠════╪════════════╣
║ 1  │ 2001-09-02 ║
╟────┼────────────╢
║ 2  │ 2000-01-01 ║
╟────┼────────────╢
║ 3  │ 2000-09-01 ║
╚════╧════════════╝

我正在使用 ms sql 服务器

标签: sqlsql-server

解决方案


只需使用您正在使用的查询来加入您的原始表:

SELECT id, max(date) as [date]
FROM data
GROUP BY id;

推荐阅读