Bookmarks

Yahoo Gmail Google Facebook Delicious Twitter Reddit Stumpleupon Myspace Digg

Search queries

pws vs iis vs apache, Trap timeout pdksh, nu vot, WWWXXXAPC, wwwxxxapc, WWWXXXAPC site:board.issociate.de, WWWXXXAPC site:board.issociate.de, WWWXXXAPC site:board.issociate.de, WWWXXXAPC site:board.issociate.de, iis is shit

Links

XODOX
Impressum

#1: Neuste Version finden

Posted on 2006-10-27 17:06:55 by andre.laugks

Hallo!

In einer Tabelle habe ich von einem Text mehrere Versionen abgelegt.
Ich m=F6chte 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=FCr einen Text kann ich das so machen:
SELECT id FROM tabelle WHERE id_value =3D 1234 AND lastupdate =3D (
SELECT
MAX(lastupdate)
FROM
tabelle
WHERE
id_value =3D 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=E4ge, was ja nicht wirklich viel ist.

SELECT id FROM tabelle AS a WHERE a.lastupdate =3D (
SELECT
MAX(b.lastupdate)
FROM
tabelle AS b
WHERE
a.id_value=3Db.id_value);
=20
Danke
=20
Andr=E9 Laugks



---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

http://archives.postgresql.org

Report this message

#2: Re: Neuste Version finden

Posted on 2006-10-27 19:17:10 by Andreas Kretschmer

Andr=E9 Laugks <andre.laugks@netcologne.de> schrieb:

> Hallo!
>=20
> In einer Tabelle habe ich von einem Text mehrere Versionen abgelegt.
> Ich m=F6chte von jedem Text jeweils die neuste Version haben.
>=20
> #Tabelle
> id id_value value lastupdate
> 1 1234 foo1 2006-10-13 15:00:01
> 2 1234 foo2 2006-10-15 16:31:59
>=20
> 3 9678 bar1 2006-10-28 18:31:16
> 4 9678 bar2 2006-10-17 14:09:55
>=20
> #Ergebnis:
> id id_value value lastupdate
> 2 1234 foo2 2006-10-15 16:31:59
> 3 9678 bar1 2006-10-28 18:31:16
>=20
> F=FCr einen Text kann ich das so machen:
> SELECT id FROM tabelle WHERE id_value =3D 1234 AND lastupdate =3D (
> SELECT
> MAX(lastupdate)
> FROM
> tabelle
> WHERE
> id_value =3D 1234);
>=20
> 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=E4ge, was ja nicht wirklich viel ist.
>=20
> SELECT id FROM tabelle AS a WHERE a.lastupdate =3D (
> SELECT
> MAX(b.lastupdate)
> FROM
> tabelle AS b
> WHERE
> a.id_value=3Db.id_value);

test=3D# 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=3D# select id from test1 where (id_value,lastupdate) in (select id_v=
alue, max(lastupdate) from test1 group by id_value);
id
----
2
3
(2 rows)

test=3D# 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=E4ftig.
Ansonsten Dein Weg, aber schau Dir das explain an, sollte mit passenden
Indexen doch auch gehen.



Andreas
--=20
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=B0, E 13.56889=
=B0

---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

Report this message

#3: Re: Neuste Version finden

Posted on 2006-10-30 09:03:19 by Albe Laurenz

> In einer Tabelle habe ich von einem Text mehrere Versionen abgelegt.
> Ich m=F6chte von jedem Text jeweils die neuste Version haben.
>=20
> #Tabelle
> id id_value value lastupdate
> 1 1234 foo1 2006-10-13 15:00:01
> 2 1234 foo2 2006-10-15 16:31:59
>=20
> 3 9678 bar1 2006-10-28 18:31:16
> 4 9678 bar2 2006-10-17 14:09:55
>=20
> #Ergebnis:
> id id_value value lastupdate
> 2 1234 foo2 2006-10-15 16:31:59
> 3 9678 bar1 2006-10-28 18:31:16
>=20
> F=FCr einen Text kann ich das so machen:
> SELECT id FROM tabelle WHERE id_value =3D 1234 AND lastupdate =3D (
> SELECT
> MAX(lastupdate)
> FROM
> tabelle
> WHERE
> id_value =3D 1234);
>=20
> 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=E4ge, was ja nicht wirklich viel ist.
>=20
> SELECT id FROM tabelle AS a WHERE a.lastupdate =3D (
> SELECT
> MAX(b.lastupdate)
> FROM
> tabelle AS b
> WHERE
> a.id_value=3Db.id_value);

Ich w=FCrde schreiben:

SELECT id FROM tabelle AS a WHERE (a.id_value, a.lastupdate) IN (
SELECT
id_value, MAX(lastupdate)
FROM
tabelle
GROUP BY
id_value);

aber das ist wahrscheinlich von der Performance her dasselbe.

Ein full scan läßt sich hier nicht vermeiden, so wie die Abfrage aussch=
aut.

Wenn nur ein einzelner Wert selektiert werden soll, geht's sicher schneller.

Ein Index, der hier hilft, w=E4re hier einer =FCber (id_value, lastupdate).

Liebe Grüße,
Laurenz Albe

---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

http://archives.postgresql.org

Report this message

#4: Re: Neuste Version finden

Posted on 2006-11-11 22:32:05 by andre.laugks

von Andreas Kretschmer <akretschmer@spamfence.net> am 27.10.2006:
> Mit passenden Indexen sollte das wohl gehen, probier mal.
> Ich hab nur die 2 Rows und keine Indexe, daher nicht aussagekr=E4ftig.
> Ansonsten Dein Weg, aber schau Dir das explain an, sollte mit passenden
> Indexen doch auch gehen.

Mein SQL-Statement war so weit ok :-(!

Ich habe lokal mit einer SQL-Entwicklungsumgebung auf den Liveserver
zugegriffen. Die =DCbertragung der Ergebnisdaten vom Liveserver zur
Entwicklungsumgebung hat so lange gedauert. Den Timeout hat eine
Timeout-Einstellung in der Entwicklungsumgebung verursacht.

Andr=E9 Laugks



---------------------------(end of broadcast)---------------------------
TIP 7: You can help support the PostgreSQL project by donating at

http://www.postgresql.org/about/donate

Report this message