Skip site navigation (1) Skip section navigation (2)

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search for
  Advanced Search

Re: Neuste Version finden



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°



Home | Main Index | Thread Index

Privacy Policy | PostgreSQL Archives hosted by Command Prompt, Inc. | Designed by tinysofa
Copyright © 1996 – 2008 PostgreSQL Global Development Group