Mysql 仅包括查询结果中的第一个组

Mysql 仅包括查询结果中的第一个组,mysql,sql,Mysql,Sql,给定模式 下面的查询 SELECT a.user_id, a.date_created, avg(ai.level) level FROM assessment a JOIN assessment_item ai ON a.id = ai.assessment_id GROUP BY a.user_id, a.date_created; 返回这些结果 user_id, a.date_created, level 1, "2015-07-13 18:26:

给定模式

下面的查询

SELECT a.user_id,
  a.date_created,
  avg(ai.level) level
FROM assessment a
  JOIN assessment_item ai ON a.id = ai.assessment_id
GROUP BY a.user_id, a.date_created;
返回这些结果

user_id, a.date_created,        level
1,       "2015-07-13 18:26:00", 4.0000  
1,       "2015-07-13 19:04:58", 6.0000  
13,      "2015-07-13 18:26:00", 2.0000  
13,      "2015-07-13 19:04:58", 3.0000  
我想更改查询,使每个用户只返回最早的结果。换句话说,应该返回以下内容

user_id, a.date_created,        level
1,       "2015-07-13 18:26:00", 4.0000
13,      "2015-07-13 18:26:00", 2.0000

一种可能的解决方案:使用用户变量“索引”行,然后过滤第一行:

select user_id, date_created, level
from (
    select a.date_created, a.level
         , @idx := (case when a.user_id = @uid then @idx + 1 else 1 end) as idx
         , @uid := a.user_id as user_id
    from 
        (select @uid := 0, @idx := 0) as init,
        (
            SELECT a.user_id,
              a.date_created,
              avg(ai.level) level
            FROM assessment a
              JOIN assessment_item ai ON a.id = ai.assessment_id
            GROUP BY a.user_id, a.id
            order by user_id, date_created
        ) as a
) as b
where idx = 1

一般来说,如果你选择了某样东西,那么你也必须按它分组。MySQL原谅了这个“错误”。大多数其他RDBMS没有。如果你试图平均ai.level,那么user_id的结果不应该是5和2.5吗?可能的重复可能的重复非常令人印象深刻,但我很惊讶,似乎相对简单的东西需要如此复杂的solution@AntonioDragos一个有用的参考: