Как преобразовать две строки в одну строку в качестве прецедентной записи и текущей записи - PullRequest
0 голосов
/ 22 мая 2019

У меня есть таблица со следующими данными.

Batch      Ingredient       Transaction date
----   -----------------  --------------------
A              I1              2019/05/22
A              I2              2019/05/23
A              I3              2019/05/24

Я бы хотел показать только две записи по дате транзакции в следующем формате

Batch      Ingredient1     TransDate1    Ingredient2     TransacDate2
----    ---------------- ------------- ---------------- --------------    
A              I3          2019/05/24        I2           2019/05/23

Ингредиент1 должен быть самой последней записью, а ингредиент - перед ингредиентом. Нет ингредиента3.

Я пробовал сводную таблицу, но не работает.

1 Ответ

1 голос
/ 22 мая 2019

Можно использовать row_number() и условное агрегирование:

select batch,
       max(case when seqnum = 1 then ingredient end) as ingredient1,
       max(case when seqnum = 1 then transdate end) as transdate1,
       max(case when seqnum = 2 then ingredient end) as ingredient2,
       max(case when seqnum = 2 then transdate end) as transdate2
from (select t.*,
             row_number() over (partition by batch order by transdate desc) as seqnum
      from t
     ) t
where seqnum <= 2
group by batch;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...