Можно ли это сделать с помощью аналитических функций оракула? - PullRequest
3 голосов
/ 20 января 2010

Мне нужна помощь по поводу запроса в Oracle 10g,

Вот мой вопрос:

Существует таблица, в которой хранятся состояния сигналов, поступающих с разных устройств.

  1. Сигналы SS1 и SS2 вставляются в таблицу в случайное время,

  2. если один из состояний сигнала SS1 или SS2 имеет значение «вверх», то сигнал результата должен быть «вверх»

  3. если оба состояния сигнала SS1 и SS2 находятся в состоянии "вниз", то сигнал результата должен быть "вниз"

Я хочу подготовить запрос, который показывает изменения состояния сигнала результата в соответствии с сигналами SS1 и SS2.

Когда я вижу график, это кажется легким, но я не могу написать запрос, используя аналитические функции.

Сценарий создания и вставки таблицы здесь .

Заранее спасибо,

1 Ответ

3 голосов
/ 20 января 2010
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...