Использование LAG для создания графика активности ID - PullRequest
0 голосов
/ 17 октября 2019

Вот базовый запрос:

SELECT
id,
date,
result
FROM
table
ORDER BY 1,2

У меня есть набор результатов, который выглядит следующим образом:

+-----+----------+--------+
| id  |   date   | result |
+-----+----------+--------+
| 123 | 2/21/19  |      1 |
| 123 | 7/19/19  |      4 |
| 123 | 8/17/19  |      1 |
| 456 | 3/4/19   |      1 |
| 456 | 8/15/19  |      5 |
+-----+----------+--------+

Я пытаюсь в основном построить временную шкалу для каждого изменения активности идентификаторов,Таким образом, идеальный результат будет выглядеть следующим образом:

+-----+---------+----------+---------+----------+---------+----------+
| id  | date_1  | result_1 | date_2  | result_2 | date_3  | result_3 |
+-----+---------+----------+---------+----------+---------+----------+
| 123 | 2/21/19 |        1 | 7/19/19 |        4 | 8/17/19 |        1 |
| 456 | 3/4/19  |        1 | 8/15/19 |        5 |         |          |
+-----+---------+----------+---------+----------+---------+----------+

Я знаю, что это будет связано с использованием функции запаздывания (я думаю?) Я все еще довольно новичок в этом.

1 Ответ

1 голос
/ 17 октября 2019

Вы можете использовать lag() или условное агрегирование. Я мог бы пойти на последнее:

select id,
       max(case when seqnum = 1 then date end) as date_1,
       max(case when seqnum = 1 then result end) as result_1,
       max(case when seqnum = 2 then date end) as date_2,
       max(case when seqnum = 2 then result end) as result_2,
       max(case when seqnum = 3 then date end) as date_3,
       max(case when seqnum = 3 then result end) as result_3
from (select t.*,
             row_number() over (partition by id order by date) as seqnum
      from t
     ) t
group by id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...