SQL Запрос (Oracle) - Выберите ближайшую дату к данной дате - PullRequest
1 голос
/ 20 марта 2020

У меня есть таблица с разными атрибутами:

**attr       date       price**
tv         01.07.19     5
tv         05.06.19     3,5
tv         03.04.19     2
music      05.06.19     7
music      02.05.19     6
mobile     01.01.19     4 
mobile     12.12.18     8

С параметром "pDate" я хочу выбрать значение для атрибута, например, pDate = '15 .06.19 '

Вывод должен выглядеть так:

attr       date       price
tv         01.06.19     5
music      05.06.19     7
mobile     01.01.19     4

Я пробовал это:

SELECT attr
       , date
       , price 
FROM table 
WHERE date <= 'pDate' 
ORDER BY Row_number() OVER ( partition BY attr ORDER BY date DESC);

1 Ответ

2 голосов
/ 20 марта 2020

Вы можете использовать row_number(). Для ближайших до или после :

select t.*
from (select t.*,
             row_number() over (partition by attr order by abs(date - :pdate) as seqnum
      from t
     ) t
where seqnum = 1;

Если вы хотите, чтобы ближайшая дата была включена или раньше , то:

select t.*
from (select t.*,
             row_number() over (partition by attr date desc) as seqnum
      from t
      where date <= :pdate
     ) t
where seqnum = 1;

Примечание. При этом будут отфильтрованы attr значения без даты «до».

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