Возникли проблемы с написанием запроса Oracle SQL - PullRequest
0 голосов
/ 26 мая 2020

У меня есть простая таблица T(NAME, DATE, VALUE)

Я хочу получить разницу между VALUE строки, содержащей самый старый DATE, и той, которая содержит самый ранний DATE, все это сгруппированы по NAME.

Мне не удается записать это в один запрос.

Любая помощь будет более чем приветствоваться, я не знаю, как это сделать.

1 Ответ

1 голос
/ 26 мая 2020

Вот один вариант; данные выборки взяты из строк №1-8; запрос, который может вам понадобиться, начинается со строки № 10.

SQL> with t(name, datum, value) as
  2  -- sample data
  3    (select 'LF', date '2020-01-01', 100 from dual union all
  4     select 'LF', date '2020-04-13', 200 from dual union all
  5     select 'LF', date '2020-05-26', 555 from dual union all
  6     --
  7     select 'ST', date '2020-03-13', 600 from dual
  8    )
  9  -- query
 10  select distinct
 11    name,
 12    maxval - minval diff
 13  from (select name,
 14          first_value(value) over (partition by name order by datum desc) maxval,
 15          first_value(value) over (partition by name order by datum asc)  minval
 16        from t
 17       );

NA       DIFF
-- ----------
LF        455
ST          0

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