2017-11-29 12 views
1

私は売上データを持つテーブルを持っており、月間売上高の標準偏差を決定しようとしています。しかし、私はエラーを取得しておく:(SQL - 月間売上高の標準偏差の決定

ここでは私のクエリは、これまでのところです:

SELECT O.Id, 
STDEV(COUNT(*)) OVER (ORDER BY YEAR(O.CreateDate), MONTH(O.CreateDate)) AS StdDeviation 
FROM Orders O 

私は2番目の行は、最も助けを必要だと思い、私はエラーを取得するコードコンパイルするとき:。

Incorrect syntax near 'order'.

任意のアイデア? 私はここでSQL Server Management Studioののv17.2

を使用していますが、私は計算しようとしているものの一例である。

ID #7 might have 1 sale in January, 2 sales in February, 4 sales in March, etc. 

Iは、個別IDの{1,2,4}の標準偏差を見つけたいです。

サンプル予想される出力:

Part Number , Standard Deviation 

1 , .86 

2, .83 

+1

使用しているDBMSにタグを付けてください。 –

+0

SQL Server Management Studio v17.2を使用しています。それはあなたが求めていることですか?申し訳ありませんが、私はかなり新しいSQLです。 –

+0

期待されるサンプル出力も提供してください –

答えて

1

まず計算の各月の数と、これを試してみてください、stdevを計算し、その数を使用します。

SELECT a.id, 
     Stdev(a.cnt) AS StdDeviation 
FROM (SELECT O.id, 
       Year(O.createdate) AS y, 
       Month(O.createdate) AS m, 
       Count(*)   AS cnt 
     FROM orders o 
     GROUP BY id, 
        Year(O.createdate), 
        Month(O.createdate)) a 
GROUP BY id 

完全なスクリプト

CREATE TABLE #temp (
    orderid int IDENTITY, 
    CreateDate datetime, 
    partid int 

) 


INSERT INTO #temp (CreateDate, partid) 
    VALUES ('1/1/2017', 7), 
    ('2/1/2017', 7), 
    ('2/15/2017', 7), 
    ('3/1/2017', 7), 
    ('3/7/2017', 7), 
    ('3/15/2017', 7), 
    ('3/30/2017', 7), 
    ('1/1/2017', 8), 
    ('2/1/2017', 8), 
    ('3/1/2017', 8), 
    ('3/7/2017', 8), 
    ('3/15/2017', 8) 



SELECT 
    a.partid, 
    STDEV(a.cnt) AS StdDeviation 
FROM (SELECT 
    partid, 
    YEAR(O.CreateDate) AS y, 
    MONTH(O.CreateDate) AS m, 
    COUNT(*) AS cnt 
FROM #temp o 
GROUP BY partid, 
     YEAR(O.CreateDate), 
     MONTH(O.CreateDate)) a 
GROUP BY partid 

DROP TABLE #temp 
+0

まさに私が必要としたことです - ありがとう! –

1

私はあなたがこのようなものを目指していると思う:あなたはOVER句でORDER BYが含まれている場合

SELECT YEAR(O.CreateDate), MONTH(O.CreateDate), 
     STDEV(COUNT(*)) OVER() AS StdDeviation 
FROM Orders O 
GROUP BY YEAR(O.CreateDate), MONTH(O.CreateDate); 

、 「累積」標準偏差が得られます。その後、

+0

これは間違いなく実行されるため、正しい方向に進んでいます!ご助力ありがとうございます。しかし、これはまさに私が望んでいたものではありません。私が欲しいのは、ID(O.IDで与えられる)と月間売上高の標準偏差という2つの列です。一例として、部品ID#15は1月に2件、2月に3件などとなります。私は毎月の販売数の標準偏差をとってみたい。 –