对于每个if else if
,我必须确定过去site_id
是plan_id
是否过去(过去意味着较小的1
)和是在此之前的某个时刻不是id
,例如:
1
应该返回:
create table billing (id int, site_id int, plan_id int);
insert into billing values
(40301, 1, 1), (40302, 1, 16), (40304, 1, 15),
(40401, 2, 1), (40402, 2, 16), (40403, 2, 1), (40404, 2, 15);
给定site_id = 1, did_return = false
site_id = 2, did_return = true
的{{1}}条记录数可以是1或数十条。
我尝试过嵌套查询:
billing
但Redshift不支持这种类型的查询:
site_id
还有其他办法吗? Redshift与Postgres类似,因此也可能有一个postgres答案。
答案 0 :(得分:1)
我找到了带连接的解决方案:
select b1.site_id, min(b3.id)
from billing b1
left join billing b2 on (b2.id < b1.id and b1.site_id = b2.site_id and b2.plan_id = 1)
left join billing b3 on (b3.id < b2.id and b2.site_id = b3.site_id and b3.plan_id <> 1)
group by b1.site_id