Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sqlserver中的滚动标准差_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

sqlserver中的滚动标准差

sqlserver中的滚动标准差,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有按对象ID分组的时间序列数据。我想知道如何在滚动的基础上计算每个对象从今天到4天前的所有值的标准偏差。即: id date value stdev 12345 24/11/2005 0.0001923076923076920 0.0000000000000000000000 37470 25/11/2005 0.0001923076923076920 0.0000000000000000000000 37470

我有按对象ID分组的时间序列数据。我想知道如何在滚动的基础上计算每个对象从今天到4天前的所有值的标准偏差。即:

 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

这能奏效吗

;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

你是说四天前还是四笔交易前?2005年12月6日id为37470的STDEV表明,您的意思是事务,而不是使用SQL Server 2012(即将于3月到期),这将变得更加容易。这方面的解决方案有用吗?嗨,我是说在那种情况下是事务性的。一个解决方案将非常有用,因为我将有一段时间无法访问2012。嗨,我想就快到了。但其中一个标准偏差计算不正确,仅使用查询中列出的示例数据:ID日期值SQL STDEV Expected STDEV 12345 24/11/2005 0.00019230769230762307692 0 0 3747025/11/2005 0.00019230762307692 0 3747028/11/2005 0.00019230762307692 0 0 3747029/11/2005 0.0001923076922307692 2.57244E-12 0 3747030/11/2005 0.00019230762307692 0 0 3747001/12/2005 0.00019230762307692 037470 02/12/2005 0.000192122958693564 8.26154E-08 8.26154E-08 37470 05/12/2005 0.00019230762307692 8.26154E-08 8.26154E-08 8.26154E-08 37470 06/12/2005 0.00019230762307692 8.26154E-08 8.26154E-08是否可以用DDL代码发布此消息,以便我可以测试此消息?或者,不是代码的最后一部分,而是选择id…GOUP BY date从样本_data3中选择*并告诉我哪些值不希望包含在STDEV计算中。hi,应包括对象范围内的所有值。以下标准偏差应为0,因为值在指定范围内没有变化: