【发布时间】:2014-04-05 19:51:06
【问题描述】:
我正在尝试查询一些交易数据,以确定每个报告在每个月底的CurrentProductionHours 值。
假设每个月的每个报告都有一个事务,这很简单...我可以使用下面代码行中的一些东西来按月划分事务,然后选择TransactionByMonth 所在的行= 1(实际上是每个月每个报告的最后一笔交易)。
SELECT
ReportId,
TransactionId,
CurrentProductionHours,
ROW_NUMBER() OVER (PARTITION BY [ReportId], [CalendarYear], [MonthOfYear]
ORDER BY TransactionTimestamp desc
) AS TransactionByMonth
FROM
tblSource
我遇到的问题是每个报告每个月不一定会有交易...... ,我需要将 last known 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
我还应该提到我有一个可用的日期表,如果需要可以参考。
** 2014 年 5 月 3 日更新 **
我现在有查询生成结果,如下例所示,但我留下了数据孤岛(当月存在交易)和两者之间的差距......我的问题仍然相似,但在某些情况下更通用的方法 - 如果您以下面的数据集为起点,填补数据孤岛之间空白的最佳方法是什么?
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
任何有关如何解决此问题的建议将不胜感激!
【问题讨论】:
标签: tsql date grouping transactional gaps-and-islands