From: | Andreas Kretschmer <akretschmer(at)spamfence(dot)net> |
---|---|
To: | pgsql-de-allgemein(at)postgresql(dot)org |
Subject: | Re: Neuste Version finden |
Date: | 2006-10-27 17:17:10 |
Message-ID: | 20061027171710.GA16169@KanotixBox |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-de-allgemein |
André Laugks <andre(dot)laugks(at)netcologne(dot)de> schrieb:
> Hallo!
>
> In einer Tabelle habe ich von einem Text mehrere Versionen abgelegt.
> Ich möchte von jedem Text jeweils die neuste Version haben.
>
> #Tabelle
> id id_value value lastupdate
> 1 1234 foo1 2006-10-13 15:00:01
> 2 1234 foo2 2006-10-15 16:31:59
>
> 3 9678 bar1 2006-10-28 18:31:16
> 4 9678 bar2 2006-10-17 14:09:55
>
> #Ergebnis:
> id id_value value lastupdate
> 2 1234 foo2 2006-10-15 16:31:59
> 3 9678 bar1 2006-10-28 18:31:16
>
> Für einen Text kann ich das so machen:
> SELECT id FROM tabelle WHERE id_value = 1234 AND lastupdate = (
> SELECT
> MAX(lastupdate)
> FROM
> tabelle
> WHERE
> id_value = 1234);
>
> Bei mehreren bekomme ich es aber nicht wirklich hin. Ich denke mal das
> kann so nicht gehen. Es kommt bei dieser Abfrage zu einem Timeout. Die
> Tabelle hat 17.000 Einträge, was ja nicht wirklich viel ist.
>
> SELECT id FROM tabelle AS a WHERE a.lastupdate = (
> SELECT
> MAX(b.lastupdate)
> FROM
> tabelle AS b
> WHERE
> a.id_value=b.id_value);
test=# select * from test1;
id | id_value | value | lastupdate
----+----------+-------+---------------------
1 | 1234 | foo1 | 2006-10-13 15:00:01
2 | 1234 | foo2 | 2006-10-15 16:31:59
3 | 9678 | bar1 | 2006-10-28 18:31:16
4 | 9678 | bar2 | 2006-10-17 14:09:55
(4 rows)
test=# select id from test1 where (id_value,lastupdate) in (select id_value, max(lastupdate) from test1 group by id_value);
id
----
2
3
(2 rows)
test=# explain analyse select id from test1 where (id_value,lastupdate) in (select id_value, max(lastupdate) from test1 group by id_value);
Mit passenden Indexen sollte das wohl gehen, probier mal.
Ich hab nur die 2 Rows und keine Indexe, daher nicht aussagekräftig.
Ansonsten Dein Weg, aber schau Dir das explain an, sollte mit passenden
Indexen doch auch gehen.
Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect. (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly." (unknow)
Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°
From | Date | Subject | |
---|---|---|---|
Next Message | Susanne Ebrecht | 2006-10-29 21:25:50 | Systems war ein voller Erfolg |
Previous Message | André Laugks | 2006-10-27 15:06:55 | Neuste Version finden |