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 に答える