id carID date1 date2 price
--- ---- --------- --------- -----
1 1 1000-01-01 9999-12-31 100
2 2 1000-01-01 2014-06-06 100
3 2 2014-06-07 2014-06-07 150
4 2 2014-06-08 9999-12-31 100
5 3 1000-01-01 2014-06-01 150
6 3 2014-06-02 2014-07-01 200
7 3 2014-07-02 2014-07-25 300
8 3 2014-07-26 9999-12-31 100
这是我的价格表;我想用我的日期范围计算总价。
我想以总价显示所有车辆;
例如我的过滤日期:
date1: 2014-06-01
date2: 2014-06-22
CARID TOTAL
------ ------
1 2100
2 2150
3 4150
我试试这个,但它只适用于一个carID
calculate price between given dates
还有这个;
calculate price between given dates in multiple ranges
答案 0 :(得分:0)
假设您有变量@date1
和@date2
,您可以使用条件聚合执行此操作:
select carid,
sum(1 + greatest(least(date2, @date2) - greatest(date1, @date1), 0) * price)
from table t
group by carid;
这只是将表中每个句点的边界替换为与外边界的交集。然后它总结了价格的持续时间。 1 +
似乎处理date2
似乎是价格的有效日期的情况,而不是处于未激活状态的第一个日期。