У нас есть таблица history
, в которой хранятся все экземпляры записи, и помечаются флаги, которые являются текущей записью и когда она изменяется - вот сокращенная версия для нее
CREATE TABLE *schema*.hist_temp
(
record_id VARCHAR
,record_created_date DATE
,current_flag BOOLEAN
,value int
)
INSERT INTO hist_temp VALUES ('Record A','2018-06-01',1,1000);
INSERT INTO hist_temp VALUES ('Record A','2018-04-12',0,900);
INSERT INTO hist_temp VALUES ('Record A','2018-03-13',0,800);
INSERT INTO hist_temp VALUES ('Record A','2018-01-13',0,700);
Так чтоу нас есть Запись A, которая обновлялась 3 раза, последняя запись помечена 1, но мы хотим видеть все 4 экземпляра истории.
Тогда у нас есть таблица dates
, которая содержит:среди прочего, даты окончания месяца:
SELECT
calendar_date
,trunc(month_start) as month_start
FROM common.calendar
WHERE
calendar_year = '2018'
and calendar_date < trunc(sysdate)
ORDER BY 1 desc
Пример данных:
calendar_date month_start
2018-06-03 2018-06-01
2018-06-02 2018-06-01
2018-06-01 2018-06-01
2018-05-31 2018-05-01
2018-05-30 2018-05-01
2018-05-29 2018-05-01
2018-05-28 2018-05-01
2018-05-27 2018-05-01
2018-05-26 2018-05-01
2018-05-25 2018-05-01
etc
Требуемые результаты:
Я хотел бы иметь возможность отобразить следующее - показатьначальная / конечная позиция месяца для записи A для 2018
record_id, month_start, value
Record A, '2018-06-01', 1000
Record A, '2018-05-01', 900
Record A, '2018-04-01', 800
Record A, '2018-03-01', 700
Record A, '2018-02-01', 700
Я пытаюсь написать этот запрос, у меня есть что-то, но я знаю, что это неправильно, поскольку значение суммируется неправильно, пожалуйста, кто-нибудь может помочь выяснитькак получить правильные значения?