2014-10-16 70 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