#sql #date #db2
#sql #Дата #db2
Вопрос:
у нас есть старая устаревшая таблица с нашей системой баллов, которая выглядит следующим образом:
с даты | до даты | очки понедельник | очки вторник | очки среда | очки четверг | очки пятница |
---|---|---|---|---|---|---|
6-12-2021 | 10-12-2021 | 10 | 30 | 20 | 15 | 5 |
13-12-2021 | 13-12-2021 | 10 | 0 | 0 | 0 | 0 |
теперь для power bi и нашей аналитики мы хотим создать запрос select, который выдает такой результат:
Дата | Очки |
---|---|
6-12-2021 | 10 |
7-12-2021 | 30 |
8-12-2021 | 20 |
9-12-2021 | 15 |
10-12-2021 | 5 |
13-12-2021 | 10 |
как что-то подобное может быть выполнено в db2?
заранее спасибо за помощь!
Ответ №1:
вы можете перечислить все даты с помощью рекурсивного CTE, а затем ДЕКОДИРОВАТЬ результат DAYOFWEEK_ISO для задания точек
with table1 (fromdate, untildate, monday, tuesday, wednesday, thursday, friday) as (
values
(date '2021-12-06', date '2021-12-10', 10, 30, 20, 15, 5),
(date '2021-12-13', date '2021-12-13', 10, 0, 0, 0, 0)
),
alldates (fromdate, untildate, monday, tuesday, wednesday, thursday, friday, points_date) as (
select table1.*, fromdate as points_date from table1
union all
select fromdate, untildate, monday, tuesday, wednesday, thursday, friday, points_date 1 day from alldates where points_date < untildate
)
select
points_date, decode(dayofweek_iso(points_date), 1, monday, 2, tuesday, 3, wednesday, 4, thursday, 5, friday) points
from alldates
order by points_date