日期范围之间的总价格(如酒店预订季节)

时间:2014-05-31 22:10:40

标签: mysql sql date range

 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

1 个答案:

答案 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似乎是价格的有效日期的情况,而不是处于未激活状态的第一个日期。