Hallo, ich möchte für jede Person das zuletzt gekaufte Produkt herausfinden.
Subquery:
Die Tabellen dienen nur zur Veranschaulichung und sind frei von der Hand geschrieben und könnne daher Fehler enthalten.
Ich hab ein Problem mit der Performance, wenn ich LATERAL nutze, die Abfrage dauert bei mir fast 1 Minute.
Mit den Subquery funktioniert es unter einer Sek. aber ich brauche alle Felder vom Produkt und die Abfrage wird riesig, da ich in Wirklichkeit viel mehr Felder habe und es evtl. noch mehr werden.
Gibt es da eine Lösung die sowohl schön ist, als auch schnell?
Code:
SELECT
produkt.*
FROM
person AS person,
LATERAL (
SELECT
p.id, p.bezeichnung, ...restliche Felder
FROM
produkt AS p
WHERE
p.person_id = person.id
ORDER BY
p.erwerbsdatum DESC LIMIT 1 ) produkt
Subquery:
Code:
SELECT
(
SELECT
Id
FROM
produkt
WHERE
produkt.person_id = person.id
ORDER BY
erwerbsdatum DESC LIMIT 1 ),
...restliche Felder
FROM
person;
Die Tabellen dienen nur zur Veranschaulichung und sind frei von der Hand geschrieben und könnne daher Fehler enthalten.
Code:
CREATE TABLE person (
id BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name TEXT
);
CREATE TABLE produkt (
id BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
person_id BIGINT CONSTRAINT produkt_person_id_fkey REFERENCES person,
erwerbsdatum: TIMESTAMPTZ,
);
Ich hab ein Problem mit der Performance, wenn ich LATERAL nutze, die Abfrage dauert bei mir fast 1 Minute.
Mit den Subquery funktioniert es unter einer Sek. aber ich brauche alle Felder vom Produkt und die Abfrage wird riesig, da ich in Wirklichkeit viel mehr Felder habe und es evtl. noch mehr werden.
Gibt es da eine Lösung die sowohl schön ist, als auch schnell?