我有一个标记表,其中包含以下字段
id markup from_date to_date
1 5 2013-01-20 2013-01-31
2 10 2013-02-01 2013-01-20
现在,如果我从1月20日到2月5日选择日期,那么我应该获得平均标记
Ex- 20 jan to 24 Jan is 5 markup for 5 days
and 25 jan 4 fen is 10 markup for 10 days
所以平均加价我会得到8.3%
答案 0 :(得分:1)
示例中的数据和计算有问题。
无论如何这里是SQLFiddle example
select sum(markup*days)/sum(days)
from
(
select Markup,
LEAST
( DATEDIFF(to_date,from_date)+1,
GREATEST(DATEDIFF('2013-02-05',from_date)+1,0),
GREATEST(DATEDIFF(to_date,'2013-01-20')+1,0)
) days
from t
where from_date between '2013-01-20' and '2013-02-05'
or
to_date between '2013-01-20' and '2013-02-05'
) t1
答案 1 :(得分:0)
虽然您的问题似乎没有错误。
为什么from_date一次小于,然后大于to_date? (使用ABS功能得到 天数)
假设您的平均值是标记总数除以总天数。
这是一个可以提供所需响应的查询:
SELECT Sum(markup) / Sum(num_days) AS the_average
FROM (SELECT id,
markup,
from_date,
to_date,
Abs (Timestampdiff(day, from_date, to_date)) AS num_days
FROM test) AS t;