簡體   English   中英

根據單個不同的列選擇唯一行-MySQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM