2014-10-16 75 views
0

我有一个表从日志(权重)记录浮点值。我想动态评估此曲线积分的绝对值。我试图根据梯形近似执行一些简单的代数。一个的采样率(B-A = 1):MS SQL服务器代数语法

(b-a)((f(a)+f(b))/2 - f(a)) 

的值F(A)和f(b)中表示记录在我的SQL Server表2个最近的值。我已经尝试与评价;错误如下:

SELECT TOP 2 
    SUM(Scale_Weight) OVER(ORDER BY t_stamp DESC)/2.0 
FROM table 

这个查询评估,而只是划分中的最新值以2:

SELECT 
    SUM(Scale_Weight) OVER(ORDER BY t_stamp DESC)/2.0 
FROM table 

正如你所看到的,我没有尝试因为我不知道如何引用特定的行(单元格?),所以“绝对值”或“最近第二次”值的相减值。作为一个noob,我觉得这个数学在单个查询中是可行的,我只是找不到合适的语法。提前致谢。

所以更新更清楚:

感谢输入ps2goat,但由于某种原因,我无法实现“TOP”的功能,所以我现在有这样的:

SELECT ABS(SUM(Scale_Weight) OVER(PARTITION BY quality_code 
    ORDER BY t_stamp 
    ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)/2.0) 
FROM table 

还需要减去前面的值,例如:

SELECT ABS(SUM(Scale_Weight) OVER(PARTITION BY quality_code 
    ORDER BY t_stamp 
    ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)/2.0 
    - 1 PRECEDING) 
FROM table 

任何想法引用上述减法值?

回答

1

您可以使用LAG函数以特定顺序引用最后一个值。例如:

SELECT Scale_Weight AS Current, LAG(Scale_Weight) AS Last OVER (ORDER BY t_stamp) 
FROM table 

您可以添加您的公式tothis查询。

0

这就是我所做的。取而代之的时间戳,我用了一个标识字段,因为这些都增加,更容易进入手动(不知道你是否有日期时间值或实际时间戳值)

小提琴:http://sqlfiddle.com/#!6/77bcb/4/0

模式:

create table x(
    xId int identity(1,1) not null primary key, 
    scale_weight decimal(12,4) 
); 

insert into x(scale_weight) 
select 24.1234 union all 
select 32.4455 union all 
select 88.1234 union all 
select 223.443; 

内部查询(下)抓取前两行,按id降序排列(使用您的t_stamp列)。外部查询将内部查询返回的所有Scale_Weight值相加并将该值除以2。

SQL:

select SUM(Scale_Weight)/2.0 from 
(
    SELECT TOP 2 Scale_Weight  
    FROM x 
    ORDER BY xid DESC 
) y 
+0

感谢输入ps2goat,但由于某种原因,我无法实现 “TOP” 的功能,所以我现在有这样的: SELECT ABS(SUM(Scale_Weight)OVER( PARTITION BY quality_code \t ORDER BY t_stamp \t ROWS BETWEEN PRECEDING AND CURRENT ROW)/ 2。0) FROM表 仍然需要减去先前值,是这样的: SELECT ABS(SUM(Scale_Weight)OVER(PARTITION BY quality_code \t ORDER BY t_stamp \t行之间1 PRECEDING AND CURRENT ROW)/2.0 - 1 PRECEDING) FROM表 任何想法,以引用上述减法值? – user2795886 2014-10-17 14:15:07

+0

你使用的是什么版本的sql server? – ps2goat 2014-10-17 14:38:40

+0

我最初应该包括这个,但我使用第三方OPC软件通过他们的MSSQL翻译器自动生成我的表(我认为这就是为什么“TOP”不起作用)。我可以得到版本,但不知道它会有帮助。 – user2795886 2014-10-17 15:20:17