有没有办法修改
Lag
函数不仅返回上一行,而且返回到之前的不同值?
目前发生的事情:
我想要的:
现在我正在使用
Lag(a1."Job Date", 1) over (partition by a1."Employee Number" Order By a1."Employee Number")
但这返回的是前一行记录而不是前一个不同或不匹配的记录。这是否可能存在滞后或可能有不同的功能?
这是一个绝妙的技巧。如果您使用“1 PRECEDING”之间的范围,它将从前一个不同值开始窗口。假设您有一些想要分区的键,但如果不是这种情况,您可以删除 PARTITION BY 子句。
小提琴:https://dbfiddle.uk/3tPzIiDN
create table some_test_data
(
id integer,
job_date date
);
insert into some_test_data values
(1, date '2023-06-01'),
(1, date '2023-06-01'),
(1, date '2023-06-01'),
(1, date '2023-07-01'),
(1, date '2023-07-01'),
(1, date '2023-07-16'),
(1, date '2023-07-16'),
(1, date '2023-07-16');
select s.*,
max(job_date) over (
partition by id
order by job_date
range between unbounded preceding and 1 preceding)
from some_test_data s;
或者,与相关子查询等效
select t1.*,
( select max(t2.job_date)
from some_test_data t2
where t1.id = t2.id
and t1.job_date > t2.job_date
) as last_distinct_job_date
from some_test_data t1;
身份证 | 作业_日期 | LAST_DISTINCT_JOB_DATE |
---|---|---|
1 | 23 年 6 月 1 日 | 空 |
1 | 23 年 6 月 1 日 | 空 |
1 | 23 年 6 月 1 日 | 空 |
1 | 23 年 7 月 1 日 | 23 年 6 月 1 日 |
1 | 23 年 7 月 1 日 | 23 年 6 月 1 日 |
1 | 23 年 7 月 16 日 | 23 年 7 月 1 日 |
1 | 23 年 7 月 16 日 | 23 年 7 月 1 日 |
1 | 23 年 7 月 16 日 | 23 年 7 月 1 日 |