mysql - 基于单个不同列选择唯一行 - MySQL
问题描述
我想选择具有不同电子邮件的行,请参见下面的示例表:
表名 = 用户
+----+---------+-------------------+-------------+
| id | title | email | commentname |
+----+---------+-------------------+-------------+
| 3 | test | rob@hotmail.com | rob |
| 4 | i agree | rob@hotmail.com | rob |
| 5 | its ok | rob@hotmail.com | rob |
| 6 | hey | rob@hotmail.com | rob |
| 7 | nice! | simon@hotmail.com | simon |
| 8 | yeah | john@hotmail.com | john |
+----+---------+-------------------+-------------+
期望的结果是:
+----+-------+-------------------+-------------+
| id | title | email | commentname |
+----+-------+-------------------+-------------+
| 5 | its ok| rob@hotmail.com | rob |
| 7 | nice! | simon@hotmail.com | simon |
| 8 | yeah | john@hotmail.com | john |
+----+-------+-------------------+-------------+
不同的值应该是表示例中id = 6
的最新条目 所需的 SQL 是什么?
解决方案
如果您使用的是 MySQL 5.7 或更早版本,那么您可以将您的表加入到子查询中,该子查询会查找每封电子邮件的最新记录:
SELECT t1.id, t1.title, t1.email, t1.commentname
FROM yourTable t1
INNER JOIN
(
SELECT email, MAX(id) AS latest_id
FROM yourTable
GROUP BY email
) t2
ON t1.email = t2.email AND t1.id = t2.latest_id;
如果您使用的是 MySQL 8+,那么只需ROW_NUMBER
在此处使用:
WITH cte AS (
SELECT id, title, email, commentname,
ROW_NUMBER() OVER (PARTITION BY email ORDER BY id DESC) rn
FROM yourTable
)
SELECT id, title, email, commentname
FROM cte
WHERE rn = 1;
注意:您的预期输出可能有问题,并且id = 6
记录是最新的rob@hotmail.com
.
推荐阅读
- math - 沿 x 轴均匀分布项目
- sql - 在 SQL 中建模课程表
- abap - 使用 FM COCF_SN_CREATE_PP 创建班次注释时出现“无效目录条目”错误
- ios - 协议类型“Encodable”的值不能符合“Encodable”;只有结构/枚举/类类型可以符合协议
- javascript - jQuery 多日期生成
- c++ - 指向 char 数组中特定位置的 C++ 指针数组
- html - 如何强制引导行中的每个图像具有相同的高度?
- python - Scrapy:为每个蜘蛛使用不同的设置顺序运行蜘蛛
- r - 如何使用高阶函数重命名我自己的函数中的列?
- c++ - 我需要一个更快的解决方案来解决以下问题