Re: Neuste Version finden

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°

In response to

Responses

Browse pgsql-de-allgemein by date

  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