两个时期之间的标记逻辑

时间:2013-01-14 08:43:54

标签: php mysql

我有一个标记表,其中包含以下字段

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%

2 个答案:

答案 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)

虽然您的问题似乎没有错误。

  1. 为什么from_date一次小于,然后大于to_date? (使用ABS功能得到 天数)

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

  3. 这是一个可以提供所需响应的查询:

    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;