[英]Select Unique Rows Based on Single Distinct Column - 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
的最新記錄。
您可以在下面嘗試使用相關子查詢
select * from table1 a
where id in (select max(id) from table1 b where a.email=b.email group by b.email)
如果“ id”是唯一鍵或主鍵,則可以使用此鍵:
select * from Users where id in (select max(id) from Users group by commentname)
上面的一項將提高數據庫性能,因為相關的子查詢來自以下事實:子查詢使用外部查詢中的信息,並且子查詢對外部查詢中的每一行執行一次。因此,如果“ id”,我建議您使用我的答案是獨特的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.