如何在Redshift中执行此查询?

时间:2017-03-03 05:06:14

标签: sql amazon-redshift

对于每个if else if,我必须确定过去site_idplan_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答案。

1 个答案:

答案 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