Ответ 1
Быстрый в 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;
Я хочу выбрать строки с distinct email
, см. таблицу ниже:
+----+---------+-------------------+-------------+
| id | title | email | commentname |
+----+---------+-------------------+-------------+
| 3 | test | [email protected] | rob |
| 4 | i agree | [email protected] | rob |
| 5 | its ok | [email protected] | rob |
| 6 | hey | [email protected] | rob |
| 7 | nice! | [email protected] | simon |
| 8 | yeah | [email protected] | john |
+----+---------+-------------------+-------------+
Желаемый результат:
+----+-------+-------------------+-------------+
| id | title | email | commentname |
+----+-------+-------------------+-------------+
| 3 | test | [email protected] | rob |
| 7 | nice! | [email protected] | simon |
| 8 | yeah | [email protected] | john |
+----+-------+-------------------+-------------+
Мне не важно, какое значение столбца id
будет возвращено.
Каким будет необходимый SQL?
Быстрый в 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;
Я предполагаю, что вы не имеете в виду, какая строка используется для получения значений title
, id
и commentname
(у вас есть "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
Поскольку вам все равно, какой идентификатор возвращен, я использую идентификатор MAX для каждого письма, чтобы упростить SQL-запрос, попробуйте
;WITH ue(id)
AS
(
SELECT MAX(id)
FROM table
GROUP BY email
)
SELECT * FROM table t
INNER JOIN ue ON ue.id = t.id
Если вы используете MySql 5.7 или новее, в соответствии с этими ссылками (MySql Official, SO QA), мы можем выбрать одну запись за group by
без необходимости каких-либо агрегатных функций.
Таким образом, запрос может быть упрощен.
select * from comments_table group by commentname;
Попробуйте выполнить запрос в действии здесь