2012-01-27 18 views
0

オブジェクトIDによってグループ化された時系列データがあります。今日と4日前のPER OBJECTの間のすべての値の標準偏差を逐次計算する方法を知りたい。私:SQL Serverにおける標準偏差の偏差

id  date  value     stdev 
12345 24/11/2005 0.0001923076923076920 0.0000000000000000000000 
37470 25/11/2005 0.0001923076923076920 0.0000000000000000000000 
37470 28/11/2005 0.0001923076923076920 0.0000000000000000000000 
37470 29/11/2005 0.0001923076923076920 0.0000000000000000000000 
37470 30/11/2005 0.0001923076923076920 0.0000000000000000000000 
37470 01/12/2005 0.0001923076923076920 0.0000000000000000000000 
37470 02/12/2005 0.0001921229586935640 0.0000000826153837838936 
37470 05/12/2005 0.0001923076923076920 0.0000000826153837838936 
37470 06/12/2005 0.0001923076923076920 0.0000000826153837838937 

67890 07/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 08/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 09/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 12/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 13/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 14/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 15/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 16/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 19/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 20/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 21/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 22/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 23/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 26/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 27/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 28/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 29/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 30/12/2005 0.0001923076923076920 0.0000000000000000000000 
67890 02/01/2006 0.0001922984471900390 0.0000000041345423064249 
+1

4日前または4回前のトランザクションを意味しますか? 2005年6月12日のSTDEV for id 37470では、代わりにトランザクションを意味します – Dibstar

+0

まもなく(March)のため、これはSQL Server 2012で*簡単*になります。これに対する解決策は有益でしょうか? – gbn

+0

こんにちは、私はその場合のトランザクションを意味します。私が2012年にしばらくアクセスできないので、解決策は非常に便利です。 – user1173599

答えて

0

これはトリックですか?

;WITH sample_data AS 
(
SELECT 12345 as id, '2005-11-24' as date, 0.0001923076923076920 as datas 
UNION ALL SELECT 37470 , '2005-11-25' , 0.0001923076923076920 
UNION ALL SELECT 37470 , '2005-11-28' , 0.0001923076923076920 
UNION ALL SELECT 37470 , '2005-11-29' , 0.0001923076923076920 
UNION ALL SELECT 37470 , '2005-11-30' , 0.0001923076923076920 
UNION ALL SELECT 37470 , '2005-12-01' , 0.0001923076923076920 
UNION ALL SELECT 37470 , '2005-12-02' , 0.0001921229586935640 
UNION ALL SELECT 37470 , '2005-12-05' , 0.0001923076923076920 
UNION ALL SELECT 37470 , '2005-12-06' , 0.0001923076923076920 
) 
,sample_data2 AS 
(
SELECT 
id 
,date 
,datas 
,row_number() OVER (PARTITION BY id ORDER BY date ASC) as row 
FROM sample_data 
) 
,sample_data3 AS 
(
SELECT 
sd2.id AS id 
,sd2.date as Date 
,sd2.datas as orig_data 
,sd3.datas as prior_data 
FROM sample_data2 sd2 
LEFT OUTER JOIN sample_data2 sd3 ON sd3.id = sd2.id 
AND sd3.row <= sd2.row 
AND sd3.row > sd2.row - 5 
AND sd2.row > 0 
) 
SELECT 
id 
,Date 
,MAX(orig_data) as Data_value 
,ISNULL(STDEV(prior_data),0) AS STDEV_ 
FROM sample_data3 
GROUP BY 
id 
,date 
+0

こんにちは、私はそれがほぼそこにあると思います。しかし、標準偏差の計算の一つがちょうどクエリに記載されているサンプルデータを使用して、間違っています: – user1173599

+0

ID \t日\t値\t SQL STDEV \t ExpectedSTDEV 24/11/2005 \t 0.000192307692307692 25/11/2005 \t 0.000192307692307692 28/11/2005 \t 0.000192307692307692 29/11/2005 \t 0.000192307692307692 \t 2.57244E-12 30/11/2005 \t 0.000192307692307692 2005年1月12日\t 0.000192307692307692 2005年2月12日\t 0.000192122958693564 \t 8.26154E-08 \t 8.26154E-08 2005年5月12日\t 0.000192307692307692 \t 8.26154E-08 \t 8.26154E-08 2005年6月12日\t 0.000192307692307692 \t 8.26154E-08 \t 8.26154E-08 – user1173599

+0

これをDDLコードでポストすると、これをテストできますか?または、コードの最後の部分(SELECT id ... GOUP BY date)の代わりにSELECT * FROM sample_data3を入力し、STDEV計算の一部として含めたくない値をお知らせください。 – Dibstar