Запрос исторических данных для получения данных на конец месяца - PullRequest
0 голосов
/ 04 июня 2018

У нас есть таблица 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

Я пытаюсь написать этот запрос, у меня есть что-то, но я знаю, что это неправильно, поскольку значение суммируется неправильно, пожалуйста, кто-нибудь может помочь выяснитькак получить правильные значения?

1 Ответ

0 голосов
/ 05 июня 2018

Попробуйте:

SELECT
  record_id,
  date_trunc('month', record_created_date)::date AS month_start,
  value
FROM hist_temp

Вывод:

Record A    2018-06-01  1000
Record A    2018-04-01  900
Record A    2018-01-01  700
Record A    2018-03-01  800
...