Re: Abfrage nach einer Reihe von Jahren

Gunnar Oehmichen <[email protected]>
Newsgroups gmane.comp.db.postgresql.german
Message-ID <[email protected]>
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


-- 
Sent via pgsql-de-allgemein mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.