2014-03-19 125 views
-1

我的數據是從PostGreSQL的表中獲取的。它由1024行和2列這是POSTGRESQL公式幫助想要

wv1   rv1 
341.6   2.48 
343.6   2.58 
344.7   2.37 
346.3   2.32 
347.9   2.29 
349.5   2.36 
351.1   2.23 
352.6   2.24 
354.2   2.25 
355.8   2.29 
357.4   2.28 
358.9   2.23 

我選擇其中使用

SELECT wv1 FROM grassland1 WHERE wv1 BETWEEN 341 AND 359 

從PostgreSQL的341和359之間WV1我申請在此公式中所選擇的數據

數據樣本表
The formula is **CRi=rv1i/(rv1START+K.(wv1i-wv1START))** 
**K=(rv1END-rv1START)/(wv1END-wv1START)** 
That is 
rv1i - The current rv1 value 
wv1i - Tha current wv1 value 
rv1START - First value of rv1 
rvlEND - last value of rv1 
wv1START - First value of wv1 
wvlEND - last value of wv1 

步驟

步驟爲分母

  • 當前RV1值作爲RVI

的步驟Denaminator RV1起始值的

  • Subraction和結束值RV1作爲 rv1END-rv1START(即,2.23-2.48)
  • wv1的縮寫起始值和wv1結束值作爲 wv1END-wv1START(即,358.9-341.6)
  • Divde(rv1END-rv1START)/(wv1END-wv1START)(即,(2.23-2.48)/(358.9-341.6)) 並命名值爲K
  • Subraction wv1i-wv1START的(即,i = 341.6,343.6,344.7,...)和與 K值乘法它作爲K.(wv1i-wv1START)
  • 與添加RVL的開始值K.(wv1i-wv1START)作爲 rv1START + K。(wv1i-wv1START)並命名爲RV1

分子/ Denaminator

  • CRI = rv1i /(rv1START + K。(wv1i-wv1START))

我的輸出將是這樣

wv1   rv1 
341.6   1 
343.6   1.049496 
344.7   0.973225 
346.3   0.961825 
347.9   0.958576 
349.5   0.955264 
351.1   0.951886 
352.6   0.965084 
354.2   0.979147 
355.8   1.006683 
357.4   1.012579 
358.9   1 

這是PostgreSQL查詢對於TIS任務

DECLARE @rvlEND decimal, @rv1START decimal, @wv1END decimal, @wv1START decimal 
    , @K decimal; 

SET @wv1START = (SELECT MIN(wv1) FROM grassland1 
      WHERE wv1 BETWEEN 341 AND 359); 
SET @wv1END = (SELECT MAX(wv1) FROM grassland1 
      WHERE wv1 BETWEEN 341 AND 359); 
SET @rv1START = (SELECT rv1 FROM grassland1 
      WHERE wv1 = @wv1START); 
SET @rvlEND = (SELECT rv1 FROM grassland1 
      WHERE wv1 = @wv1END); 

SET @K = (@rv1END - @rv1START)/(@wv1END - @wv1START); 

現在所有變量都已計算出來,以評估每一行的值。

SELECT t.wv1, 
    t.rv1/(@rv1START + (@K*(t.wv1 - @wv1START))) as CRi 
FROM grassland1 t 
WHERE wv1 BETWEEN 341-359 

我不知道如何查看接收到的查詢輸出,如果不可能我怎麼能在jsp中做到這一點...

+0

@vmvadivel爵士,如何寫這個查詢的過程或函數,那麼如何我將在PostGreSQL中看到輸出 –

+0

@Arnaud ALLAVENA,先生,如何將這個查詢寫爲一個過程或函數,那麼我將如何我看到在PostGreSQL輸出運行 –

回答

1

嘗試這種方式

SELECT wv1, rv1, 
     rv1/(rv1_first + ((rv1_last - rv1_first)/(wv1_last - wv1_first)) * (wv1 - wv1_first)) cri 
    FROM 
(
    SELECT wv1, rv1, 
     FIRST_VALUE(wv1) OVER (ORDER BY wv1) wv1_first, 
     FIRST_VALUE(wv1) OVER (ORDER BY wv1 DESC) wv1_last, 
     FIRST_VALUE(rv1) OVER (ORDER BY wv1) rv1_first, 
     FIRST_VALUE(rv1) OVER (ORDER BY wv1 DESC) rv1_last 
    FROM grassland1 
    WHERE wv1 BETWEEN 341 AND 359 
) q 
ORDER BY wv1 

輸出:

 
| WV1 | RV1 |   CRI | 
|-------|------|----------------| 
| 341.6 | 2.48 |    1 | 
| 343.6 | 2.58 | 1.052589378361 | 
| 344.7 | 2.37 | 0.973225094353 | 
| 346.3 | 2.32 | 0.961825109636 | 
| 347.9 | 2.29 | 0.958576302354 | 
| 349.5 | 2.36 | 0.997532312053 | 
| 351.1 | 2.23 | 0.951886303634 | 
| 352.6 | 2.24 | 0.965084424964 | 
| 354.2 | 2.25 | 0.979146752528 | 
| 355.8 | 2.29 | 1.006682929308 | 
| 357.4 | 2.28 | 1.012578939262 | 
| 358.9 | 2.23 |    1 | 

這裏是SQLFiddle演示

+0

非常感謝你先生,其工作很好... –