我需要有关oracle 10g中的查询的帮助,
这是我的问题:
有一个表存储来自不同设备的信号状态。
SS1和SS2信号以随机时间插入表中,
如果SS1或SS2信号状态之一为“up”,则结果信号应为“up”
如果SS1和SS2信号状态均为“向下”,则结果信号应为“向下”
我想准备一个查询,根据SS1和SS2信号显示结果信号状态的变化。
当我看到图表时似乎很容易,但我无法使用分析函数编写查询。
表创建和插入脚本为here.
提前致谢,
答案 0 :(得分: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