Mam nadzieję, że ktoś mógłby mnie oświecić. Mam tygodniowe dane z kolumną - ostatni dzień tego tygodnia, również typ i czas trwania. I chcę agregować czas trwania dla każdego typu w oddzielnej kolumnie na każdy tydzień (zdobądź go na tydzień # 1, tydzień # 2 itd.) Dla każdego identyfikatora.

Więc to jest wejście:

+-----+---------------+------+----------+
| id  | week end date | type | duration |
+-----+---------------+------+----------+
| 101 | 14.07.2017    | A    | 5        |
| 101 | 14.07.2017    | A    | 1        |
| 101 | 14.07.2017    | B    | 4        |
| 101 | 14.07.2017    | C    | 2        |
| 101 | 21.07.2017    | A    | 4        |
| …   | …             | …    | …        |
| 102 | 14.07.2017    | A    | 2        |
| 102 | 14.07.2017    | B    | 4        |
+-----+---------------+------+----------+

To jest to, co próbuję zdobyć:

+---------+----------+-------+-------+---+
|     id  | Week num | A_sum | B_sum | … |
+---------+----------+-------+-------+---+
|     101 |        1 |     6 |     4 |   |
|     101 |        2 |     5 |     8 |   |
|     101 |        3 |     5 |     5 |   |
|     …   |          |       |       |   |
|     102 |        1 |     5 |     2 |   |
|     102 |        2 |     8 |     2 |   |
+---------+----------+-------+-------+---+

W tym przypadku liczba typów jest mały, więc możemy ręcznie zdefiniować nowe kolumny jako SUM(CASE WHEN type='A' THEN duration ELSE 0 END) "A"

Ogólnie rzecz biorąc, wydaje się wykonalne, ale nie mogę go zebrać razem ..

1
Oleksii 12 marzec 2020, 17:48

1 odpowiedź

Najlepsza odpowiedź

Rozważać:

select
    id,
    dense_rank() over(order by week_end_date) week_num
    sum(case when type = 'A' then duration end) a,
    sum(case when type = 'B' then duration end) b,
    sum(case when type = 'C' then duration end) c
from mytable
group by id, week_end_date

Zapytanie dynamicznie generuje numery tygodniowe na podstawie dat dostępnych w tabeli (pierwsza data dostaje tydzień 1, i tak dalej). Następnie agregujemy przez ID i tydzień, a także warunkowe sumy do obliczania sumy.

3
GMB 12 marzec 2020, 14:52