根据单个唯一列选择不重复的行。

11 浏览
0 Comments

根据单个唯一列选择不重复的行。

这个问题在此已经有了答案:

获取每组的前1行

我想选择具有不同电子邮件的行,如下面的示例表所示:

+----+---------+-------------------+-------------+
| 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 |
+----+-------+-------------------+-------------+
|  3 | test  | rob@hotmail.com   | rob         |
|  7 | nice! | simon@hotmail.com | simon       |
|  8 | yeah  | john@hotmail.com  | john        |
+----+-------+-------------------+-------------+

我不在意返回哪个id列值。

需要什么SQL?

admin 更改状态以发布 2023年5月21日
0
0 Comments

我猜你的意思是你不在意是哪一行用于获取titleidcommentname的值(你在所有行中都有“rob”,但我不知道在你的数据模型中是否实际强制执行)。如果是这样,那么你可以使用窗口函数来返回给定电子邮件地址的第一行:

select
    id,
    title,
    email,
    commentname
from
(
select 
    *, 
    row_number() over (partition by email order by id) as RowNbr 
from YourTable
) source
where RowNbr = 1

0
0 Comments

快速的TSQL操作。

SELECT a.*
FROM emails a
INNER JOIN 
  (SELECT email,
    MIN(id) as id
  FROM emails 
  GROUP BY email 
) AS b
  ON a.email = b.email 
  AND a.id = b.id;

0