在SQL中使用LAG跳过特定行

问题描述 投票:0回答:1

我有一个看起来像这样的表:

enter image description here

使用SQL中的LAG函数,我只想对star_date = end_date的值执行LAG,并获取过去的先前start_date记录,其中start_date = end_date。我的茶几将有一个额外的列,像这样:enter image description here

我希望我的问题很清楚,任何帮助都值得赞赏。

sql google-bigquery lag skip
1个回答
0
投票
您可以为这些值分配一个组并使用它:

select t.*, (case when start_date = end_date then lag(start_date) over (partition by (start_date = end_date) order by start_date) end) as prev_eq_start_date from t;

请注意,如果您的数据量很大并且大多数行的日期不同,那么可能会出现资源问题。在这种情况下,额外的未使用的partition by键可以帮助:

select t.*, (case when start_date = end_date then lag(start_date) over (partition by (start_date = end_date), (case when start_date <> end_date then start_date end) order by start_date) end) as prev_eq_start_date from t;

这对结果没有影响,但是可以避免由于太多具有不同值的行而导致的资源错误。
© www.soinside.com 2019 - 2024. All rights reserved.