SQL Select Data между двумя значениями - PullRequest
0 голосов
/ 29 августа 2018

Кто-нибудь знает, как выбрать все данные

   between (AE = "A" AND AE = "E") 
OR between (AE = "A" AND AE = "B")  
OR  between (AE = "B" AND AE = "E")

Таблица отсортирована по IPID, а затем по времени измерения

пожалуйста, посмотрите на картинку.

Спасибо !!

таблица

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Я не знаю, как обращаться с другими значениями или может ли A / B / E повториться, но аналогичная логика должна работать: заполнить пустые строки предыдущим символом A / B / E и затем отфильтровать.

WITH cte AS
 (
   SELECT t.*,
      Last_Value(CASE WHEN AE IN ('A', 'B', 'E' THEN AE END IGNORE NULLS)
      Over (PARTITION BY IPID
            ORDER BY measurement_time
            ROWS BETWEEN Unbounded Preceding AND 1 Preceding) AS lv
   FROM tab t
 )
SELECT *
FROM cte 
WHERE lv IN ('A', 'B')
0 голосов
/ 29 августа 2018

TomKari с форума sas.com нашел решение в шаге данных.

спасибо dnoeth и scaisEdge за помощь !!

Хорошего дня !!

data SetSwitch;
    retain KeepSwitch 0;
    set Have;

    if AE = "A" then KeepSwitch = 1;
    else if AE = "E" then KeepSwitch = 0;
    else if AE = "B" & KeepSwitch = 1 then KeepSwitch = 0;
    else if AE = "B" & KeepSwitch = 0 then KeepSwitch = 1;
run;

data SetVar;
    set SetSwitch;

    if KeepSwitch = 1 then if AE = " " then AE = lag(AE);
run;

data Want;
    set SetVar;

    if AE ^= " " then output;
run;
0 голосов
/ 29 августа 2018

Вы второй и третий между бесполезно, потому что первое условие охватывает результат для двух других в любом случае правильный синтаксис должен быть

  select * from my_table 
  where   (AE between  "A" AND  "E") 
      OR  (AE between  "A" AND  "B")  
      OR  (AE between  "B" AND  "E") 
...