gpt4 book ai didi

mysql - 从 MYSQL 数据库中查找除最后一个重复记录之外的所有记录

转载 作者:行者123 更新时间:2023-11-29 05:53:48 25 4
gpt4 key购买 nike

我有一个包含以下记录的 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 |
-------------------------------

我怎样才能做到这一点?

最佳答案

我会在 COUNTRow_number 结果中创建两个新列,因为

  1. 通过name列获取COUNT个总数,得到MAX行数。
  2. 通过name 使用Row_number 获取rownumber。
  3. 要编写条件,请将 name 的最后行号从总 count 中排除

如果你的 mysql 版本支持窗口函数,你可以试试这段代码。

制作 Row_numberCOUNT 然后删除更大的 Row_number by Name

SELECT  *
FROM (
select *,
Row_number() over(partition by Name order by ID) rn,
COUNT(*) over(partition by Name) totle
from `list`
) t1
where rn <> totle

sqlfiddle

编辑

如果您有 ID auto_increment 列并且您的 mysql 不支持窗口函数,您可以尝试这个查询。

SELECT id,Name,Age,XXX,YYY
FROM (
SELECT *,
(SELECT COUNT(*) FROM `list` t1 WHERE t.ID >= t1.ID AND t.Name = t1.Name) rn,
(SELECT COUNT(*) FROM `list` t1 WHERE t.Name = t1.Name) totle
FROM `list` t
) t1
where rn <> totle

sqlfiddle

[结果]:

| id | Name | Age | XXX | YYY |
|----|------|-----|-----|-----|
| 1 | aa | 12 | qqq | rr |
| 3 | bb | 13 | qhq | rr |
| 4 | bb | 13 | pqq | tr |

关于mysql - 从 MYSQL 数据库中查找除最后一个重复记录之外的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51627672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com