Как вставить записи за следующие 6 дней (вс-пт), когда указана только дата для (сб) - PullRequest
0 голосов
/ 29 марта 2019

У меня есть вместимость грузовика за 1 день в неделю, и один и тот же грузовик будет использоваться в течение недели, поэтому я хочу заполнять значения мощности ежедневно.т.е. я хочу преобразовать еженедельные данные в ежедневные данные, заполнив то же значение емкости в запросе SQL

Ниже приведен образец данных

Date                 capacity
6-Jan-2018      5.58
13-Jan-2018     4.6

Ожидаемый результат:

Date                capacity
 6-Jan-2018    5.58
 7-Jan-2018    5.58
 8-Jan-2018    5.58
 9-Jan-2018    5.58
 10-Jan-2018   5.58
 11-Jan-2018   5.58
 12-Jan-2018   5.58
13-Jan-2018    4.6
14-Jan-2018    4.6
15-Jan-2018    4.6
16-Jan-2018    4.6
17-Jan-2018    4.6
18-Jan-2018    4.6
19-Jan-2018    4.6

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Использовал следующие пункты (понимание), чтобы дать вам решение.

  1. Исходя из вашего тега 'Oracle', я полагаю, вам нужно решение для базы данных Oracle
  2. Ваше описание У меня есть емкость грузовика за 1 день в неделю , и пример показывает, что вы будете знать емкость сразу в первый день, и это будет вместимость за все 7 дней (текущая + следующие шесть дней)
WITH VW_DWC AS (SELECT LEVEL-1 DAY_COUNT FROM DUAL CONNECT BY LEVEL <= 7)
SELECT DT.DT_START + V.DAY_COUNT ON_DATE, DT.CAPACITY
FROM VW_DWC V CROSS JOIN ( 
  -- you can provide all your date, capacity pairs here as union all   
  SELECT to_date('06-Jan-2018', 'DD-MON-YYYY') DT_START, 5.58 AS CAPACITY from dual
  UNION ALL
  SELECT to_date('13-Jan-2018', 'DD-MON-YYYY') DT_START, 4.6 AS CAPACITY from dual
) DT
ORDER BY ON_DATE

и результат

enter image description here

0 голосов
/ 29 марта 2019

Полагаю, у вас есть столбец для указания номера недели для каждой даты начала вашей недели. Давайте назовем это week_no. Затем вы можете использовать простой запрос connect by со стандартной опцией prior sys_guid (для предотвращения циклов)

select t.dt+ level-1 as dt, t.capacity 
  from t connect by level <= 7
    and prior week_no = week_no
and prior sys_guid() is not null;

DEMO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...