获取具有多行的唯一记录组

时间:2015-05-17 22:03:38

标签: mysql

我在MySQL中有以下表格:

表分数:

id integer
score integer
scoredate date

复合(id,scoredate)是唯一的

id  score scoredate
--+----+------
1 | 2 | 2015-01-01
1 | 2 | 2015-01-02
1 | 3 | 2015-01-03
1 | 2 | 2015-01-04   
2 | 3 | 2015-01-01
2 | 3 | 2015-01-02
2 | 3 | 2015-01-03
2 | 3 | 2015-01-04
3 | 1 | 2015-01-01
3 | 1 | 2015-01-02
3 | 1 | 2015-01-03
3 | 1 | 2015-01-04
4 | 3 | 2015-01-01
4 | 3 | 2015-01-02
4 | 3 | 2015-01-03
4 | 1 | 2015-01-04

我想识别其分数至少改变一次的'ids'。

id  score
--+----
1 | 2 
1 | 3 
4 | 3 
4 | 1 

我能够使用复杂的子查询来做到这一点,但我想知道是否有办法使用更简单的查询来完成它。

例如,使用以下查询我得到了我们关心的id。我可以做另一个子查询或加入此输出以获得上面的结果,但我希望构建一个更简单的查询。以下已经有效地进行了2次传递(2次查询)并进行了另一次连接或子查询,这意味着要由引擎处理的第3次传递或查询:

SELECT `id` FROM (SELECT `id`, `score` FROM `scores` GROUP BY `id`, `score`) AS sq GROUP BY `id` HAVING count(1) > 1

我希望在1-2次通过/查询中得到结果。

2 个答案:

答案 0 :(得分:1)

SELECT distinct id, score
FROM Scores
where id in (select id from Scores group by id having count(distinct score) > 1);

这会给你想要的结果。

答案 1 :(得分:0)

SELECT DISTINCT x.*
           FROM my_table x
           JOIN my_table y
             ON y.id = x.id
            AND y.date > x.date
            AND y.score <> x.score;