Выберите значение для каждого идентификатора после сортировки по нескольким столбцам - PullRequest
1 голос
/ 29 января 2020

Ищите способ выбрать одно «состояние» для «id1» на основе самого низкого «id2», а затем МАКС. «The_date». Я смог сделать это, создав несколько подзапросов, сначала найдя min id2 для id1, затем обнаружив максимальное значение «the_date» для id2 и присоединив их к исходной таблице. Но похоже, что должен быть способ сделать это с одним qry?

with data as(
Select 101 as id1, 11 as id2, to_date('01/02/2019','MM/DD/YYYY') as the_date, 'a' as status from dual union all
Select 101 as id1, 11 as id2, to_date('01/01/2019','MM/DD/YYYY') as the_date, 'b' as status from dual union all
Select 101 as id1, 24 as id2, to_date('01/02/2019','MM/DD/YYYY') as the_date, 'g' as status from dual union all
Select 200 as id1, 41 as id2, to_date('01/02/2017','MM/DD/YYYY') as the_date, 'c' as status from dual union all
Select 200 as id1, 61 as id2, to_date('01/02/2019','MM/DD/YYYY') as the_date, 'z' as status from dual)

Результат qry должен быть:

id1|id2|the_date|status
101|11|'01/02/2019'|a
200|41|'01/02/2017'|c

1 Ответ

1 голос
/ 29 января 2020

Вы можете использовать row_number():

select d.*
from (select d.*,
             row_number() over (partition by id1 order by id2, the_date desc) as seqnum
      from data d
     ) d
where seqnum = 1;

Здесь - это дБ <> скрипка.

...