1

我有一个具有如下字段的标记表

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%

4

2 回答 2

1

您的示例中的数据和计算有问题。

无论如何,这是一个SQLFiddle 示例

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  
于 2013-01-14T13:34:14.770 回答
0

尽管您的问题似乎几乎没有错误。

  1. 为什么 from_date 一次小于,然后大于 to_date ?(使用 ABS 函数获取天数)

  2. 假设您的平均值是总加价除以总天数。

这是可以为您提供所需响应的查询:

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;  
于 2013-01-14T09:00:10.520 回答