Значения фильтра SQL в зависимости от других значений из того же столбца - PullRequest
0 голосов
/ 15 октября 2018

У меня есть база данных, в которой есть столбцы Время, Действие и Значение.Я хочу отфильтровать определенные действия в зависимости от других действий.Пример:

Time    Action              Value
1:30    Drink sold          5
1:31    Happy hour          1
1:32    Drink sold          5 *
1:33    Happy hour          1
1:34    Drink sold          5 *
1:35    Drink sold          5 *
1:36    Drink sold          5 *
1:37    Happy hour          0
1:38    Drink sold          5
1:39    Drink sold          5
1:40    Drink sold          5
1:41    Happy hour          0
1:42    Drink sold          5
1:43    Happy hour          1
1:44    Drink sold          5 *
1:45    Happy hour          1
1:46    Drink sold          5 *
1:47    Drink sold          5 *
1:48    Drink sold          5 *
1:49    Happy hour          0
1:50    Drink sold          5

Результат должен содержать только проданные напитки, когда Счастливый час равен 1. Помечено *.Счастливый час можно установить повторно.База данных , но в идеале решение просто использует простой SQL.

1 Ответ

0 голосов
/ 15 октября 2018

Один метод использует lag() для сравнения самых последних строк с записями счастливого часа.Тогда просто подумайте, где самое последнее имеет значение «1»:

select t.*
from (select t.*,
             max(case when action = 'Happy hour' and value = 0 then time end) over (order by time) as happy_hour_0,
             max(case when action = 'Happy hour' and value = 1 then time end) over (order by time) as happy_hour_1
      from t
     ) t
where action = 'Drink sold' and
      ((happy_hour_0 is null and happy_hour_1 is not null) or
       (happy_hour_1 > happy_hour_0)
      ); 
...