2015-07-13 3 views
1

Учитывая схемувключают только первая группа результатов запроса

enter image description here

Следующий запрос

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 
+0

В общем, при выборе что-то, тогда вы тоже должны сгруппироваться. MySQL прощает «ошибку». Большинство других РСУБД этого не делают. – Strawberry

+0

Если вы пытаетесь усреднить ai.level, не должны ли результаты для user_id быть 5 и 2.5? – Acantud

+0

Возможный дубликат [SELECT query возвращает 1 строку из каждой группы] (http://stackoverflow.com/questions/14375099/select-query-return-1-row-from-each-group) – Barranka

ответ

1

Возможное решение: переменные использование пользователем, чтобы «индекс» строк, а затем отфильтровать первую строку:

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 
+0

Это очень впечатляет , но я удивлен, что что-то, что кажется относительно простым, должно требовать такого сложного решения –

+0

@ AntonioDragos Полезная ссылка: http://www.xaprb.com/blog/2006/12/07/how-to-select-the -firstleastmax-строка-за-группы-в-SQL / – Barranka

Смежные вопросы