在(基于时间)在另一列中满足特定条件之前,仅将每个值的行保留在一列中



我有一个订单表,用order_id .其他相关列包括customer_idtimestampCondition_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;

相关内容

  • 没有找到相关文章