2015-10-28 5 views
0

У меня есть DB в mysql, и мне нужно создать столбец MAX (date) в соответствии с «GROUP BY», но я хочу видеть все строки. PK - это группа, дата начала. Я хочу, чтобы найти максимальную (StartDate) для каждой группы - но все-таки увидеть все записи, например:показать столбец MAX для группы by - показать все строки

group | StartDate | MAX(StartDate) 
    1  | 2015-10-01 | 2015-10-20 
    1  | 2015-10-10 | 2015-10-20 
    1  | 2015-10-20 | 2015-10-20 
    2  | 2015-09-24 | 2015-10-05 
    2  | 2015-10-05 | 2015-10-05 

, как я могу это сделать? используя «group by» на группе оставляет меня всего 2 строки ... спасибо!

EDIT: Я знаю, что могу это сделать, присоединившись к таблице с собой и вычислив MAX (StartDate) в объединенной таблице, но код для таблицы очень длинный - я хочу знать, есть ли более элегантный способ сделать так ...

ответ

0
select t1.*, t2.m_date 
from your_table t1 
join 
(
    select `group`, max(startdate) as m_date 
    from your_table 
    group by `group` 
) t2 on t1.`group` = t2.`group` 
+0

Я думал об этом - но код для базового идентификатора таблицы очень долго, содержит много соединений и это будет просто массивный код ... Я хочу сейчас, если theres другой способ, поэтому код будет выглядеть немного более «элегантным», – Bramat

1

Вы можете сделать это с помощью переменных, не вступая в таблицу дважды:

select t.*, 
     (@d := if(@g = `group`, @d, 
        if(@g := `group`, startdate, startdate) 
       ) 
     ) as maxdate 
    from table t cross join 
     (select @g := '', @d := '') params 
    order by `group`, startdate desc 
Смежные вопросы