Hilfe beim Finden einer passenden Abfrage
Hilfe beim Finden einer passenden Abfrage
am 25.03.2011 15:15:58 von Marco
Hi,
Ich suche eine Abfrage, die mir die letzten Einträge pro id liefert. D=
ie
Tabelle sieht so aus:
id date min max value
1 2011-03-25 20 30 17
3 2011-03-21 40 55 43
3 2011-03-23 40 55 52
2 2011-02-25 5 2
4 2011-03-15 74
4 2011-03-25 128
1 2011-03-22 20 30 24
Die folgende Abfrage
select id, max(date) from table group by id;
liefert genau die Zeilen, die ich möchte, allerdings fehlen die Spalte=
n min,
max und value. Wenn ich=20
select id, max(date), min, value, max from table group by id, min, value, m=
ax;
versuche, erhalte ich zuviele Zeilen.
Marco
--=20
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein
Re: Hilfe beim Finden einer passenden Abfrage
am 26.03.2011 19:10:53 von Albert Baumann
Hallo Marco,
eine Lösung :
Erstelle eine Abfrage mit einer temp. Tabelle mit einer Reihenfolge ü=
ber
die ID sortiert nach DATE desc.
--temp.Tabelle anlegen
with temp1 as ( SELECT id, date, min, max, "value" ,
--Reihenfolge ermitteln=20
row_number()over (partition by id order by date desc) AS rang
FROM tabelle
)
-- Neue Abfrage, einschränken mit rang =3D 1
select id, date, min, max, "value" from temp1
where rang =3D 1
;
Ergebnis:
id date min max value
---------------------------------------------
1; "2011-03-25"; 20; 30; 17
2; "2011-02-25"; 5; ; 2
3; "2011-03-23"; 40; 55; 52
4; "2011-03-25"; ; ; 128
GruÃ
Albert
Am Freitag, den 25.03.2011, 15:15 +0100 schrieb Marco:
> Hi,
>=20
> Ich suche eine Abfrage, die mir die letzten Einträge pro id liefer=
t. Die
> Tabelle sieht so aus:
>=20
> id date min max value
> 1 2011-03-25 20 30 17
> 3 2011-03-21 40 55 43
> 3 2011-03-23 40 55 52
> 2 2011-02-25 5 2
> 4 2011-03-15 74
> 4 2011-03-25 128
> 1 2011-03-22 20 30 24
>=20
> Die folgende Abfrage
>=20
> select id, max(date) from table group by id;
>=20
> liefert genau die Zeilen, die ich möchte, allerdings fehlen die Sp=
alten min,
> max und value. Wenn ich=20
>=20
> select id, max(date), min, value, max from table group by id, min, valu=
e, max;
>=20
> versuche, erhalte ich zuviele Zeilen.
>=20
>=20
> Marco
>=20
>=20
>=20
--=20
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein@postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein
Re: Hilfe beim Finden einer passenden Abfrage
am 27.03.2011 14:31:16 von Marco
On 2011-03-26 Albert Baumann wrote:
> Hallo Marco,
>=20
> eine Lösung :
>=20
> Erstelle eine Abfrage mit einer temp. Tabelle mit einer Reihenfolge =C3=
=BCber
> die ID sortiert nach DATE desc.
An eine temporäre Tabelle habe ich auch schon gedacht. Ich dachte, vie=
lleicht
gibt es eine einfache Möglichkeit, eine einzelne prägnante Abfrag=
e zu
erstellen.
Danke für den Hinweis mit partition.
Marco
--=20
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein
Re: Hilfe beim Finden einer passenden Abfrage
am 30.03.2011 12:40:27 von Nicolas Barbier
Am 27. März 2011 14:31 schrieb Marco :
> On 2011-03-26 Albert Baumann wrote:
>
>> eine Lösung :
>>
>> Erstelle eine Abfrage mit einer temp. Tabelle mit einer Reihenfolge =C3=
=BCber
>> die ID sortiert nach DATE desc.
>
> An eine temporäre Tabelle habe ich auch schon gedacht. Ich dachte, v=
ielleicht
> gibt es eine einfache Möglichkeit, eine einzelne prägnante Abfr=
age zu
> erstellen.
Alberts Beispiel *ist* eine einzelne Abfrage. Der Begriff »tempor=C3=
=A4re
Tabelle« wird hier m. E. ein bisschen fremd benutzt: es geht um ein
WITH-Query.
Man kann das gleiche auch mit einem schlichten Subquery anstatt von WITH ma=
chen:
SELECT id, date, min, max, value FROM (SELECT id, date, min, max,
value, row_number() OVER (PARTITION BY id ORDER BY date DESC) rn FROM
tabelle) t WHERE rn =3D 1;
Nicolas
--=20
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein