Получить группу записей по нескольким столбцам mysql - PullRequest
0 голосов
/ 24 сентября 2019

Вот моя структура таблицы

comment_file_id  comment_id  attachement_id  source  created_by
   33           203               42          IN        101
   35           203               46          OUT       101
   36           203               42          OUT       101
   37           203               42          OUT       101

Я хочу получить только 3 записи, так как записи, связанные с attachment_id 42, являются дубликатами для источника OUT, поэтому oi должны исключить их.

    select * 
      from comments 
     where comment_id = 203 
     GROUP 
        BY source
         , created_by 
         , attachement_id ;

но получаю ошибки

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

использование min()

select min(comment_file_id) as comment_file_id,comment_id,attachement_id,source
,created_by from table
group by comment_id,attachement_id,source
,created_by
0 голосов
/ 24 сентября 2019

Если вы используете MySQL 8+, тогда вам может помочь ROW_NUMBER.Мы можем сформулировать ваш запрос как объединение всех записей, не подлежащих дублирующим ограничениям, наряду с единственной записью, которая не считается дубликатом:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY comment_file_id) rn
    FROM comments
    WHERE comment_id = 203 AND attachement_id = 42 AND source = 'OUT'
)

SELECT comment_file_id, comment_id, attachement_id, source, created_by
FROM comments
WHERE comment_id = 203 AND (attachement_id <> 42 OR source <> 'OUT')
UNION ALL
SELECT comment_file_id, comment_id, attachement_id, source, created_by
FROM cte
WHERE rn = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...