Храните только строки для каждого значения в одном столбце ДО (основанного на времени) определенного условия в другом столбце. - PullRequest
0 голосов
/ 11 июня 2019

У меня есть таблица заказов, пронумерованная order_id.Другие соответствующие столбцы включают customer_id, timestamp и Condition_column.Для каждого customer_id я хочу сохранить строки ПЕРЕД (ака timestamp<=) в первый раз, когда их Condition_column не null.

Мой сервер данных является presto, и я считаю, что это должно бытьвозможно с некоторыми OVER PARTITION BY утверждениями;но я не могу понять, как.

Вот пример таблицы:

order_id    customer_id    timestamp    Condition_col
abc          stan           5/11/19
def          stan           5/20/19
efg          stan           6/1/19       text
hij          stan           6/9/19       text2
jkl          jimmy          5/22/19      text3
klm          mike           5/01/19      
lmn          mike           5/17/19      
xyz          mike           5/30/19      text4
wyt          sam            5/4/19       text5
ard          sam            5/24/19      text6
shd          sam            6/5/19       text7

Вот что я хочу получить в результате:

order_id    customer_id    timestamp    Condition_col
abc          stan           5/11/19
def          stan           5/20/19
efg          stan           6/1/19       text
jkl          jimmy          5/22/19      text3
klm          mike           5/01/19      
lmn          mike           5/17/19      
xyz          mike           5/30/19      text4
wyt          sam            5/4/19       text5

Я немного застрялпытаясь понять, как логически написать это.Любая помощь будет оценена.

1 Ответ

2 голосов
/ 11 июня 2019

Вы можете использовать оконные функции:

select t.*
from (select t.*,
             min(case when condition_col is not null then timestamp end) over (partition by customer_id) as min_condition_ts
      from t
     ) t
where min_condition_ts is null or  -- no non-NULL value
      timestamp <= min_condition_ts;
...