Hallo,
ich möchte bestimmte Datensätze in einer Tabelle löschen, die ich vorher per SQL ermittelt habe
CREATE TEMPORARY TABLE z AS
SELECT DISTINCT reg_id, bez_id, typ, lfdnr, gueltigab
FROM finanzen a1
WHERE TO_CHAR(a1.gueltigab, 'YYYY-MM-DD') IN (
SELECT gueltigab FROM (
SELECT foo.reg_id, foo.bez_id, foo.typ, foo.lfdnr, TO_CHAR(foo.gueltigab, 'YYYY-MM-DD') as gueltigab, count(foo.gueltigab) FROM (
SELECT DISTINCT reg_id, bez_id, typ, lfdnr, gueltigab FROM finanzen
) as foo
GROUP BY foo.reg_id, foo.bez_id, foo.typ, foo.lfdnr, TO_CHAR(foo.gueltigab, 'YYYY-MM-DD')
ORDER BY foo.reg_id, foo.bez_id, foo.typ, foo.lfdnr, TO_CHAR(foo.gueltigab, 'YYYY-MM-DD')
)as bar
WHERE bar.count > 1 AND a1.reg_id = bar.reg_id AND a1.typ = bar.typ AND a1.lfdnr = bar.lfdnr AND bar.gueltigab = TO_CHAR(a1.gueltigab, 'YYYY-MM-DD')
);
CREATE TEMPORARY TABLE y AS
SELECT reg_id, bez_id, typ, lfdnr, gueltigab
FROM finanzen b1
WHERE
gueltigab in (SELECT gueltigab FROM z WHERE b1.reg_id = z.reg_id AND b1.typ = z.typ AND b1.lfdnr = z.lfdnr)
and gueltigab != (SELECT MAX(gueltigab) FROM z WHERE b1.reg_id = z.reg_id AND b1.typ = z.typ AND b1.lfdnr = z.lfdnr);
in der Tabelle y steht dann ungefähr folgendes drin
reg_id | bez_id | typ | lfdnr | gueltigab
--------+--------+-----+-------+---------------------
246 | 2 | E | 1 | 2006-11-01 16:02:13
246 | 2 | A | 4 | 2006-11-01 16:02:13
246 | 2 | A | 5 | 2006-11-01 16:02:13
246 | 2 | A | 6 | 2006-11-01 16:02:13
246 | 2 | A | 7 | 2006-11-01 16:02:13
246 | 2 | A | 1 | 2006-11-01 16:02:13
246 | 2 | A | 2 | 2006-11-01 16:02:13
[...]
(812 Zeilen)
wie müsste jetzt mein DELETE SQL Statement aussehen?
DELETE FROM finanzen WHERE ?
die Where Klausel müßte ungefähr so aussehen "reg_id = y.reg_id and bez_id = y.bez_id an typ = y.typ and lfdnr = y.lfdnr and gueltigab = y.gueltigab"
Ab Postgresql 8.1 kann man dafür wohl USING verwenden - wie löse ich das aber mit Postgresql 7.4?
mfg
Twilo
Farbtabelle