今天在開發時,遇到一個小需求,大概需求是:mysql
描述:有一張mysql單表,表中有10W+的數據,主鍵ID爲自增。sql
備註:可能存在幾條數據部分字段相同。markdown
需求:根據必定條件查詢數據,若是查詢結果中有備註的數據存在。則過濾重複字段的數據,取ID最大的一條數據。函數
不知道我說的明白不,舉個栗子吧,哈哈哈,這樣一目瞭然。學習
有一張學生成績表tb_student_achievement,多個學生可能存在age和grade都相同的狀況ui
id | sex | name | age | grade |
---|---|---|---|---|
1 | 男 | 張三 | 15 | 90 |
2 | 男 | 李四 | 16 | 95 |
3 | 男 | 王五 | 15 | 90 |
4 | 男 | 趙六 | 16 | 95 |
5 | 男 | 馮七 | 14 | 100 |
6 | 女 | 郭八 | 15 | 98 |
7 | ... | ... | ... | ... |
id | sex | name | age | grade |
---|---|---|---|---|
5 | 男 | 馮七 | 14 | 100 |
4 | 男 | 趙六 | 16 | 95 |
3 | 男 | 王五 | 15 | 90 |
下面爲查詢SQL:spa
SELECT a.*
FROM tb_student_achievement a,
(
SELECT MAX(id) as id
FROM tb_student_achievement
WHERE sex= '男'
GROUP BY `age`, `grade`) b
WHERE a.id= b.id
ORDER BY a.grade DESC;
複製代碼
固然,若是有重複數據要取ID最小的只須要修改max函數爲min便可,其餘狀況依據思路修改就好啦。code