我有一个mysql表,其中包含以下记录
-------------------------------
| ID | Name | Age | XXX | YYY |
-------------------------------
| 1 | aa | 12 | qqq | rr |
-------------------------------
| 2 | aa | 12 | ttt | pp |
-------------------------------
| 3 | bb | 13 | qhq | rr |
-------------------------------
| 4 | bb | 13 | pqq | tr |
-------------------------------
| 5 | bb | 13 | ql | jjn |
-------------------------------
我的要求是检索除最后一个条目外第一列的所有重复记录。目前,我试图检索重复,这是工作良好
SELECT Name, Age, XXX, YYY FROM list
INNER JOIN (SELECT Name
FROM list
GROUP BY Name
HAVING COUNT(Name) > 1) dup
ON list.Name = dup.Name;
输出就像
-------------------------------
| ID | Name | Age | XXX | YYY |
-------------------------------
| 1 | aa | 12 | qqq | rr |
-------------------------------
| 2 | aa | 12 | ttt | pp |
-------------------------------
| 3 | bb | 13 | qhq | rr |
-------------------------------
| 4 | bb | 13 | pqq | tr |
-------------------------------
| 5 | bb | 13 | ql | jjn |
-------------------------------
但是我想从输出中删除最后一条记录
-------------------------------
| ID | Name | Age | XXX | YYY |
-------------------------------
| 1 | aa | 12 | qqq | rr |
-------------------------------
| 3 | bb | 13 | qhq | rr |
-------------------------------
| 4 | bb | 13 | pqq | tr |
-------------------------------
我怎样才能做到这一点?
1条答案
按热度按时间q5lcpyga1#
我将在中创建两个新列
COUNT
以及Row_number
结果是因为得到
COUNT
总数(按)name
列以获取MAX
行数。使用
Row_number
由name
获取行数。写入排除最后一行的条件
name
从总计count
如果你的mysql版本支持window函数你可以试试这个代码。制造
Row_number
以及COUNT
然后移除较大的Row_number
由Name
.sqlfiddle公司
编辑
如果你有
ID
自动增量列和您的mysql不支持窗口功能您可以尝试此查询。sqlfiddle公司
[结果]: