У меня есть несколько разных типов данных, относящихся к диапазону дат, которые я хочу объединить, но в то же время разбить по дням. Таким образом, данные за 3 дня приведут к трем строкам:
start primary_key
start+1 primary_key
start+2 primary_key
Я поиграл, используя предложение модели оператора select в 10g, и искал лучший способ добиться этого. В настоящее время я присоединяюсь к диапазону дат, который охватывает весь диапазон возможных дат (выберите min (дата начала), max (дата окончания)). Я бы предпочел выбрать данные и добавить больше строк, чтобы преобразовать их в набор данных за день.
редактирование:
Мне удалось придумать (теперь включает образцы данных):
SELECT * FROM (
SELECT 123 req_code,
345 req_par_code,
TO_DATE('01-03-2010', 'dd-mm-yyyy') req_start_date,
TO_DATE('05-03-2010', 'dd-mm-yyyy') req_end_date
FROM dual
)
MODEL
PARTITION BY (req_code)
DIMENSION BY (0 d)
MEASURES (SYSDATE dt, req_par_code, req_start_date, req_end_date)
RULES ITERATE(365) UNTIL (dt[iteration_number] >= TRUNC(req_end_date[0])) (
dt[iteration_number] = NVL(dt[iteration_number-1] + 1, TRUNC(req_start_date[0])),
--Copy data across
req_par_code[ iteration_number ] = req_par_code[0],
req_start_date[ iteration_number ] = req_start_date[0],
req_end_date[ iteration_number ] = req_end_date[0]
)
ORDER BY dt, req_code;