我有一个看起来像这样的表:
使用SQL中的LAG函数,我只想对star_date = end_date的值执行LAG,并获取过去的先前start_date记录,其中start_date = end_date。我的茶几将有一个额外的列,像这样:
我希望我的问题很清楚,任何帮助都值得赞赏。
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;
这对结果没有影响,但是可以避免由于太多具有不同值的行而导致的资源错误。