2015-02-23 2 views
0

С помощью здесь я получил мои данные выглядит следующим образом:команда Oracle WHERE с IF

enter image description here

Pumpe1_1 мои данные, Next_ это значение следующей строки, Priv_ значение ряда позади ,

Теперь я пытаюсь выбрать только зеленые отмеченные строки, условие в том, что мне нужны только данные, когда Pumpe1_1 изменяется от True до False или в другом направлении. Там я застрял и нуждаюсь в помощи.

Пробовал до сих пор:

SELECT Pumpe1_1, next_, priv_ 
FROM pump_box_hist 
where ((Pumpe1_1 = 'TRUE' and next_ != 'TRUE') or (Pumpe1_1 = 'False' and next_ != 'True')) AND (priv_ != next_ OR next_ != priv_); 

Благодарности

+0

Пожалуйста, покажите данные в виде форматированного текста, а не как изображения; не каждый может получить доступ к сайту изображения, для начала. В чем проблема с вами, вы пробовали? Помимо случая в ваших условиях, не соответствующих вашим значениям данных (в виде строки «TRUE» не совпадает с «True»). –

+2

Почему вторая строка зеленая, если она не изменилась с первой строки? – jpw

+0

См. Функцию LAG. –

ответ

1

Для выбора первого ряда изменений, вы можете сделать:

SELECT Pumpe1_1, next_, priv_ 
FROM pump_box_hist 
WHERE (Pumpe1_1 = next_ AND Pumpe1_1 <> priv_) 

Результат:

Pumpe1_1 NEXT_ PREV_ 
------------------------------- 
TRUE  TRUE FALSE 
FALSE  FALSE TRUE 
TRUE  TRUE FALSE 
FALSE  FALSE TRUE 

Пример результата в SQL Fiddle.

NB: Я не думаю, что существует логика выбора первой записи в выделенном списке.

Если да, то вы должны добавить его в результате использования union:

SELECT 'FALSE' as Pumpe1_1, 'TRUE' as next_, 'FALSE' as priv_ 

UNION ALL 

SELECT Pumpe1_1, next_, priv_ 
FROM pump_box_hist 
WHERE (Pumpe1_1 = next_ AND Pumpe1_1 <> priv_) 
+0

Просто отлично, спасибо! –