sql group by with excluded data

时间:2018-03-14 12:35:12

标签: mysql sql

我的表:

id  | request |  subject     | date
1   |    5    |      1       |  576677
2   |    2    |      3       |  576698 
3   |    5    |      1       |  576999 
4   |    2    |      3       |  586999
5   |    2    |      7       |  596999

需要按两列(请求,主题)选择唯一记录。但是,如果我们有不同的请求主题对(2-3,2-7),则应从结果查询中排除此记录。

我的查询现在是:

SELECT MAX(id), id, request, subject, date
FROM `tbl`
GROUP BY request, subject
having count(request) > 1
order by MAX(id) desc

如何从此查询中排除id = 4,id = 5的记录?谢谢!

2 个答案:

答案 0 :(得分:1)

您可以按要求分组,然后检查每个组中是否所有主题相同。你可以使用MIN()和MAX():

来做到这一点
SELECT request, MIN(subject) AS subject
  FROM table_1
 GROUP BY request
HAVING MIN(subject) = MAX(subject)

至于您的更新,我假设您希望组中的最大ID的所有字段(在您的示例中为ID 3)。然后查询将如下所示:

SELECT *
  FROM table_1 t
 WHERE t.id IN (SELECT MAX(s.id)
                  FROM table_1 s
                 GROUP BY s.request
                HAVING MIN(s.subject) = MAX(s.subject))
 ORDER BY t.id

答案 1 :(得分:1)

你可以试试这个。

select * from MyTable T1
WHERE NOT EXISTS( SELECT * FROM MyTable T2 
                 WHERE T1.id <> T2.id 
                       and T1.request = T2.request 
                       and T1.subject <> T2.subject)

Sql Fiddle