2012-02-27 10 views
0

1週間または1ヶ月、1年間に製品が平均で販売された回数を計算します。Sql:顧客が期間内に製品を注文した平均時間。

私は金額には関心がありませんが、顧客が特定の製品を何回購入したかは関心がありません。

オーダーライン

OrderNo | ProductNo | Amount | 
---------------------------------------- 
     1 |   1 |  10 | 
     1 |   4 |  2 | 
     2 |   1 |  2 | 
     3 |   1 |  4 | 

注文

 OrderNo | OrderDate 
    ---------------------------------------- 
      1 | 2012-02-21 
      2 | 2012-02-22 
      3 | 2012-02-25 

は、これは、私はあなたがそれをグループ化し、平均化ごとにカウント第1プリクエリする必要があります

ProductNo | Average Orders a Week | Average Orders a month | 
------------------------------------------------------------ 
     1 |      3 |      12 | 
     2 |      5 |      20 | 
+1

(それはコメントのためにあまりにも大きいです!)これはDRappの回答のコピーですが、SQL Serverのコード化され行うことができますあなたは入力から出力値を得ましたか? –

+0

申し訳ありませんが、それはちょうどランダムなデータをより明確にする必要があります – gulbaek

+0

どのSQL ... SQLServer、MySQL ??? – DRapp

答えて

1

を使用している場合は、次の

はどのように

SELECT PreCount.ProductNo, 
     PreCount.TotalCount/PreCount.CountOfYrWeeks AS AvgPerWeek, 
     PreCount.TotalCount/PreCount.CountOfYrMonths AS AvgPerMonth, 
     PreCount.TotalCount/PreCount.CountOfYears AS AvgPerYear 
FROM (SELECT OL.ProductNo, 
       Count(*) TotalCount, 
       Count(DISTINCT Datepart(wk, O.OrderDate)) AS CountOfYrWeeks, 
       Count(DISTINCT Datepart(mm, O.OrderDate)) AS CountOfYrMonths, 
       Count(DISTINCT Year(O.OrderDate)) AS CountOfYears 
     FROM OrderLine OL JOIN [Order] O 
       ON OL.OrderNo = O.OrderNo 
     GROUP BY OL.ProductNo) PreCount 
3

を探しています出力されますあなたが望む方法。 1年目と2年目を区別するために、トランザクションのyear()をグループ化修飾子に追加して区別します。 2010年1月の売上高、2011年の売上高、2012年の売上高...同様に、2010年の第1週、2011年と2012年の第1週、3年間を1週間とカウントする代わりに。あなたがMySQLの

select 
     PreCount.ProductNo, 
     PreCount.TotalCount/PreCount.CountOfYrWeeks as AvgPerWeek, 
     PreCount.TotalCount/PreCount.CountOfYrMonths as AvgPerMonth, 
     PreCount.TotalCount/PreCount.CountOfYears as AvgPerYear 
    from 
     (select 
       OL.ProductNo, 
       count(*) TotalCount, 
       count(distinct YEARWEEK(O.OrderDate)) as CountOfYrWeeks, 
       count(distinct Date_Format(O.OrderDate, "%Y%M")) as CountOfYrMonths, 
       count(distinct Year(O.OrderDate)) as CountOfYears 
      from 
       OrderLine OL 
       JOIN Order O 
        on OL.OrderNo = O.OrderNo 
      group by 
       OL.ProductNo) PreCount 
+0

あなたの答えをありがとうが、私はSQL Serverを使用しているので、ブリッジの答えを受け入れる必要があります。 – gulbaek

関連する問題