выберите 1 строку для каждого дня между от до до даты в sql db2

#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