2013-01-14 30 views
1

我有場像下面標記邏輯之間二期

id  markup  from_date  to_date 
    1  5   2013-01-20  2013-01-31 
    2  10   2013-02-01  2013-01-20 

現在,如果我是從01月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%

+1

我不知道你能/想這樣做在SQL,什麼編程語言,你使用(除了顯而易見的SQL)。 – Manuel

+0

我使用的是PHP和mysql –

+0

這個平均值是如何降至6.6的? – DhruvPathak

回答

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; 
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 
+0

非常感謝它的工作 –

+0

@ user1619419歡迎來到Stack Overflow。如果這個答案適合你,請[標記爲已接受](http://stackoverflow.com/faq#howtoask) – valex