我有一个包含时间段和金额的数据库表。将它们视为具有每日期限和价格的合同:
start | end | amount_per_day
2013-01-01 | 2013-01-31 | 100
2013-02-01 | 2013-06-30 | 200
2013-01-01 | 2013-06-30 | 100
2013-05-01 | 2013-05-15 | 50
2013-05-16 | 2013-05-31 | 50
我想做一个查询,显示每个时期的总数,即:
2013-01-01-2013-01-31第一、三张合约活跃,所以每天总量为200。2013-02-01-2013-04-30,第二、三行活跃,所以总数为 300。从 2013-05-01 到 2013-05-15,第二、第三和第四行处于活动状态,因此总数为 350。从 2013-05-16 到 2013-05-31 第二,第三和第五行是活跃的,所以总数又是 350。最后,从 2013-06-01 到 2013-06-30,只有第二和第三行是活跃的,所以总数又回到了 300。
start | end | total_amount_per_day
2013-01-01 | 2013-01-31 | 200
2013-02-01 | 2013-04-30 | 300
2013-05-01 | 2013-05-31 | 350
2013-06-01 | 2013-06-30 | 300
(没有必要检测间隔2013-05-01 -> 2013-05-15
并2013-05-16 -> 2013-05-31
具有相同的总数并合并它们,但这会很好)。
我更喜欢可移植的解决方案,但如果不可能的话,SQL Server 也可以工作。
我可以对表的结构进行一些小的更改,因此如果它可以使查询更简单,例如用结束日期独占来标记时间段(所以第一个时间段将是 start = 2013-01-01,end = 2013-02-01) 随时提出这样的建议。