我有一个订单表,用order_id
.其他相关列包括customer_id
、timestamp
和Condition_column
。对于每个customer_id
,我只想在第一次不null
Condition_column
时保留行之前(又名timestamp<=
(。
我的数据服务器是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
我有点陷入试图弄清楚如何合乎逻辑地写这个。任何帮助将不胜感激。
您可以使用窗口函数:
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;