Witam.
Mam tabelę w PostgreSQL 9.1:
CREATE SEQUENCE cena_cena_id_seq;
CREATE TABLE cena (
cena_id BIGINT NOT NULL DEFAULT nextval('cena_cena_id_seq'),
data DATE NOT NULL,
cena NUMERIC(2) NOT NULL,
produkt_id BIGINT NOT NULL,
CONSTRAINT cena_id PRIMARY KEY (cena_id)
);
Kolumna data oznacza początek obowiązywania ceny. Koniec obowiązywania ceny to wartość początkowa następnej daty, dla tego samego produktu.
Wprowadziłem następujące dane testowe:
INSERT INTO cena (data, cena, produkt_id) VALUES ('1995-12-12', 12.00, 0);
INSERT INTO cena (data, cena, produkt_id) VALUES ('1996-12-12', 13.00, 0);
Chcę napisać zapytanie, które wyświetli wszystkie ceny podając początek i koniec daty obowiązywania ceny. W przypadku ostatniej daty obowiązywania chcę wyświetlić datę '9999-10-10'.
Stworzyłem następujące zapytanie:
SELECT c.cena, c.produkt_id AS produkt, c.data AS dataod, (SELECT cc.data FROM cena cc WHERE c.produkt_id = cc.produkt_id AND cc.data > c.data ORDER BY data LIMIT 1) AS datado FROM cena c;
Otrzymałem następujący rezulatat:
12;0;"1995-12-12";"1996-12-12"
13;0;"1996-12-12";"2000-12-14"
18;0;"2000-12-14";""
Co poprawić, aby dla ostatniej daty otrzymać '9999-10-10'?
Pozdrawiam,