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