【发布时间】:2021-09-04 21:32:19
【问题描述】:
我有一张如下图所示的表格
person_id source_system r_diff
1 A NULL
1 B 0
1 B 9
1 A 15
1 A 574
1 B 0
1 A 63
1 A 136
1 B 0
我想根据 Or operation 的 2 条规则选择数据
a) 选择source_system = B 所在的所有记录
b) 选择 n 和 n-1 行,其中 r_diff = 0。
例如,在上面的数据中,您可以找到r_diff = 0 的行号2,6,9。所以,我想选择第 1,2 和 5,6 和 8,9 行。你可以看到我是如何选择 n 和 n-1 行的
我尝试了以下
select *, lag(*) from table A
where (r_diff is NULL or r_diff = 0) or source_system in ('B')
我希望我的输出如下所示
person_id source_system r_diff
1 A NULL
1 B 0
1 B 9
1 A 574
1 B 0
1 A 136
1 B 0
【问题讨论】:
-
您的数据是如何排序的?如果您以不同的方式订购它们,您的前一行可能与预期不同
-
按时间排序。在示例数据框中没有时间信息。但是您可以假设上述顺序将保持不变,并且正在寻找基于上述顺序的解决方案
标签: sql postgresql group-by window-functions