Für jeden site_id
Ich muß feststellen, ob die plan_id
war 1
in der Vergangenheit und (Vergangenheit ein geringere id
bedeutet) vor, dass nicht 1
an einem gewissen Punkt war, zum Beispiel:Wie mache ich diese Abfrage in Redshift?
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);
zurückkehren sollen:
site_id = 1, did_return = false
site_id = 2, did_return = true
Die Anzahl der billing
Aufzeichnungen für einen bestimmten site_id
könnte 1 oder Dutzende sein.
Ich habe versucht, verschachtelte Abfragen:
select (
select (
select id from billing where plan_id <> 1 and id < b2.id order by id desc limit 1
)
from billing b2 where plan_id = 1 and id < b1.id order by id desc limit 1
)
from billing b1
order by id desc limit 1
Aber Redshift nicht über diese Art der Abfrage unterstützen:
ERROR: This type of correlated subquery pattern is not supported due to internal error
Gibt es eine andere Möglichkeit, dies zu tun? Redshift ähnelt Postgres, daher gibt es wahrscheinlich auch eine Postgres-Antwort.