Группировка по одному полю
Допустим есть таблица из трёх столбцов, мне надо отобрать максимальное значение из третьего, сгруппировав только по первому!, а второй чтобы отображал значение, соответствующее максимальному значению в третьем. Как это сделать?
по логике в GROUP BY надо просто указать первый столбец не указывая второй (по моему так работает на mysql), но это приводит к ошибке.
Для примера запрос по логике должен выглядеть так
SELECT createby,num,MAX(dat)
FROM visit
GROUP BY createby
соответственно num должен браться тот который соответствует MAX(dat) (максимальной дате)
Как составить верно такой запрос?
Ответы (2 шт):
Можно данные вытащить вот таким запросом
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;
надо отобрать максимальное значение из третьего, сгруппировав только по первому!, а второй чтобы отображал значение, соответствующее максимальному значению в третьем.
Для этого в оракле есть функция keep
SELECT
createby,
max(num) keep(dense_rank first order by dat desc nulls last),
max(dat)
FROM visit
GROUP BY createby