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

Рейтинг: 0Ответов: 2Опубликовано: 20.01.2023

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

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

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

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

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

Ответы

▲ 0

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

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;
▲ 0

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

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

SELECT 
  createby,
  max(num) keep(dense_rank first order by dat desc nulls last),
  max(dat)
FROM visit 
GROUP BY createby