Re: Abfrage nach einer Reihe von Jahren

From: Gunnar Oehmichen <oehm8895(at)uni-landau(dot)de>
To: bs(at)bit-field(dot)de, Andreas Gaab <A(dot)Gaab(at)scanlab(dot)de>, "pgsql-de-allgemein(at)postgresql(dot)org" <pgsql-de-allgemein(at)postgresql(dot)org>
Subject: Re: Abfrage nach einer Reihe von Jahren
Date: 2013-10-02 12:59:42
Message-ID: 524C18BE.4070701@uni-landau.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Hey, vielen lieben Dank,

Entschuldigt die fehlende Information des Formats, date (date).
nur die OR Variante bringt mir nicht das was ich will. Ich weiss sie
funktioniert:

SELECT mzb.land,
count ( distinct (mzb.samplsite_id)) AS AnzahlProbestellen
FROM public.mzb WHERE
EXTRACT (year from mzb.date) = 1999 OR
EXTRACT (year from mzb.date) = 2000 OR
EXTRACT (year from mzb.date) = 2001 OR
EXTRACT (year from mzb.date) = 2002
GROUP BY mzb.land;

land | anzahlprobestellen
-----------------------+--------------------
Bayern | 32
MecklenburgVorpommern | 10
Niedersachsen | 1601
NordrheinWestfalen | 854
RheinlandPfalz | 791
SchleswigHolstein | 3
(6 rows)

Führe ich diese aus, bekomme ich alle Probestellen wiedergegeben, welche
in EINEM (siehe unten) der angegebenen Jahre Einträge haben. Wichtig ist
mir jedoch zu wissen, welche Probestellen denn in ALLEN diesen Jahren
beprobt wurden.

Das gleiche Ergebnis liefern:

WHERE EXTRACT (YEAR FROM mzb.date) IN (1999, 2000, 2001, 2002)

WHERE mzb.date >= '01.01.1999'::timestamp AND
mzb.date <= '31.12.2002'::timestamp

und

WHERE EXTRACT (YEAR FROM mzb.date) BETWEEN 1999 AND 2002

Mit der Abfrage sehe ich nun die Jahre in welchem die oben bei SH
gezählten Probestellen Einträge haben:

SELECT land,
mzb.samplsite_id,
EXTRACT (YEAR FROM date) AS Probejahr
FROM
public.mzb WHERE mzb.land = 'SchleswigHolstein' AND
(EXTRACT (year from mzb.date) = 1999 OR
EXTRACT (year from mzb.date) = 2000 OR
EXTRACT (year from mzb.date) = 2001 OR
EXTRACT (year from mzb.date) = 2002)
GROUP BY mzb.samplsite_id, mzb.land, Probejahr;

land | samplsite_id | probejahr
-------------------+--------------+-----------
SchleswigHolstein | 1200004 | 2000
SchleswigHolstein | 1200003 | 2000
SchleswigHolstein | 1200005 | 2002
SchleswigHolstein | 1200005 | 2001
(4 rows)

Wie ihr seht beinhaltet die OR Abfrage alle Probestellen, welche in
einem der besagten Jahre Einträge haben. Ziel ist jedoch solche
aufzuführen oder zu zählen, die in ALLEN Jahren beprobt wurden.

Warum macht eigentlich die AND Abfrage wie erst von mir gedacht keinen
Sinn? Eine Zeile kann ja nicht mehrere Werte in der date-Spalte haben,
die dann auch noch aus unterschiedlichen Jahren wären, wenn ich das
richtig verstehe.

Gruß,

Gunnar

Am 02.10.2013 13:00, schrieb bernhard:
> Hallo Andreas,
>> Alternativ sollte folgendes auch klappen:
>>
>> WHERE
>> mzb.date > '01.01.1999'::timestamp AND
>> mzb.date < '31.12.2002'::timestamp
>>
>>
> muß das nicht
>
> mzb.date <= '31.12.2002'::timestamp
>
> sein?
>
> Gruß
> Bernhard
>

--
Gunnar Oehmichen
Quantitative Landscape Ecology
Institute for Environmental Sciences
University Koblenz-Landau
Fortstrasse 7
76829 Landau
Germany
http://www.uni-koblenz-landau.de/landau/fb7/umweltwissenschaften/landscape-ecology/Staff/gunnaroehmichen

In response to

Responses

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Lars Grundei 2013-10-02 13:19:38 Re: Abfrage nach einer Reihe von Jahren
Previous Message bernhard 2013-10-02 11:00:41 Re: Abfrage nach einer Reihe von Jahren