Я пытаюсь запросить некоторые данные о транзакциях, чтобы установить значение CurrentProductionHours
для каждого отчета в конце каждого месяца.
При условии, что для каждого отчета в каждом месяце была транзакция, это довольно просто ... Я могу использовать что-то в строках кода ниже, чтобы разделить транзакции по месяцам, а затем выбрать строки, где TransactionByMonth
= 1 (фактически, последняя транзакция для каждого отчета каждый месяц).
SELECT
ReportId,
TransactionId,
CurrentProductionHours,
ROW_NUMBER() OVER (PARTITION BY [ReportId], [CalendarYear], [MonthOfYear]
ORDER BY TransactionTimestamp desc
) AS TransactionByMonth
FROM
tblSource
Моя проблема заключается в том, что не обязательно будет транзакция для каждого отчета каждый месяц ... В таком случае мне нужно для переноса последнего известного CurrentProductionHours
значения на месяц, в котором не было транзакций, поскольку это указывает на отсутствие изменений. Возможно, это значение может потребоваться переносить несколько раз.
Исходные данные:
ReportId TransactionTimestamp CurrentProductionHours
1 2014-01-05 13:37:00 14.50
1 2014-01-20 09:15:00 15.00
1 2014-01-21 10:20:00 10.00
2 2014-01-22 09:43:00 22.00
1 2014-02-02 08:50:00 12.00
Целевые результаты:
ReportId Month Year ProductionHours
1 1 2014 10.00
2 1 2014 22.00
1 2 2014 12.00
2 2 2014 22.00
Я также должен упомянуть, что у меня есть таблица дат, на которую можно ссылаться при необходимости.
** ОБНОВЛЕНИЕ 05.03.2014 **
Теперь у меня есть запрос, который генерирует результаты, как показано в приведенном ниже примере, но у меня остались островки данных (где транзакция существовала в этом месяце) и промежутки между ними ... Мой вопрос все еще похож, но в некотором смысле немного более общий: Как лучше всего заполнить пробелы между островками данных, если в качестве отправной точки у вас есть набор данных ниже?
ReportId Month Year ProductionHours
1 1 2014 10.00
1 2 2014 12.00
1 3 2014 NULL
2 1 2014 22.00
2 2 2014 NULL
2 3 2014 NULL
Будем очень признательны за любые советы о том, как решить эту проблему!