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
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 |