2010-01-20 21 views
3

我需要幫助有關在Oracle 10g查詢,它可以通過oracle分析函數完成嗎?

這裏是我的問題:

有存儲來自不同設備的信號狀態的表。

  1. SS1和SS2的信號被插入到表中隨機時間,

  2. 如果SS1或SS2信號狀態的一個是「向上」,則結果信號應該是「向上」

  3. 如果兩個SS1和SS2的信號狀態是「向下」,那麼結果信號應該是「降」

我要準備一個查詢,顯示結果信號狀態變化艾科接到SS1和SS2信號。

當我看到該圖似乎很容易,但我無法使用分析函數編寫查詢。

表的創建和插入腳本是提前here.

感謝,

回答

3
SELECT s2.*, 
     CASE WHEN ss1 = 'down' AND ss2 = 'down' THEN 'down' ELSE 'up' END AS result 
FROM (
     SELECT s.*, 
       LAST_VALUE(DECODE(signal_id, 'SS1', signal_status, NULL) IGNORE NULLS) OVER (ORDER BY signal_date) AS ss1, 
       LAST_VALUE(DECODE(signal_id, 'SS2', signal_status, NULL) IGNORE NULLS) OVER (ORDER BY signal_date) AS ss2 
     FROM t_signal s 
     ) s2 
ORDER BY 
     signal_date 
+0

這個查詢就是一直在尋找既for.Using LAST_VALUE和解碼在一起對我來說是很好的經驗。 謝謝, – 2010-01-20 13:28:50

相關問題