Группировка по одному полю

Допустим есть таблица из трёх столбцов, мне надо отобрать максимальное значение из третьего, сгруппировав только по первому!, а второй чтобы отображал значение, соответствующее максимальному значению в третьем. Как это сделать?

по логике в GROUP BY надо просто указать первый столбец не указывая второй (по моему так работает на mysql), но это приводит к ошибке.

Для примера запрос по логике должен выглядеть так

SELECT createby,num,MAX(dat)
FROM visit 
GROUP BY createby

соответственно num должен браться тот который соответствует MAX(dat) (максимальной дате) Как составить верно такой запрос?


Ответы (2 шт):

Автор решения: SwaD

Можно данные вытащить вот таким запросом

WITH vis as (
    SELECT createby, MAX(dat)
    FROM visit 
    GROUP BY createby, 
)
select 
      v.createby
    , v.num
    , v.dat
from visit v, vis vw
where v.createby = vw.createby 
  and v.dat = vw.dat;
→ Ссылка
Автор решения: ESkri

надо отобрать максимальное значение из третьего, сгруппировав только по первому!, а второй чтобы отображал значение, соответствующее максимальному значению в третьем.

Для этого в оракле есть функция keep

SELECT 
  createby,
  max(num) keep(dense_rank first order by dat desc nulls last),
  max(dat)
FROM visit 
GROUP BY createby
→ Ссылка