Discussion:
mehrere Daten (Zeiträume) abfragen
(zu alt für eine Antwort)
Lutz Donnerhacke
2003-06-24 13:16:54 UTC
Permalink
ich möchte in einer sql abfrage mehrere zeiträume abfragen
select name, nummer from tabelle
where datum between '01.jan.02' and '01.mar.02'
and datum between '01.apr.02' and '01.jun.02'
and datum between '01.jul.02' and '01.sep.02'
Du meinst "or".
Wolfgang Mahnke
2003-06-24 13:15:58 UTC
Permalink
ich möchte in einer sql abfrage mehrere zeiträume abfragen
Hi, wo liegt jetzt dein Problem?
select name, nummer from tabelle
where datum between '01.jan.02' and '01.mar.02'
and datum between '01.apr.02' and '01.jun.02'
and datum between '01.jul.02' and '01.sep.02'
Mit dieser Anfrage wirst du vermutlich nicht viele Treffer bekommen,
versuchs mal mit OR statt AND ;-)

Tschuess
Wolfgang
Stefan Stark
2003-06-24 13:18:04 UTC
Permalink
ich möchte in einer sql abfrage mehrere zeiträume abfragen
select name, nummer from tabelle
where datum between '01.jan.02' and '01.mar.02'
and datum between '01.apr.02' and '01.jun.02'
and datum between '01.jul.02' and '01.sep.02'
ob da was raus kommt ?

z.b: 01.02.02
datum between '01.jan.02' and '01.mar.02' --> true
datum between '01.apr.02' and '01.jun.02' --> false
datum between '01.jul.02' and '01.sep.02' --> false

die 3 mit and verknüpft --> FALSE !

müsste so sein *untested*
where ( (datum between '01.jan.02' AND '01.mar.02')
OR (datum between '01.apr.02' AND '01.jun.02')
OR (datum between '01.jul.02' AND '01.sep.02') )

Stefan
--
"Lets not complicate our relationship by trying to communicate
with each other." - Ashleigh Brilliant [American author, *1933]
Tom
2003-06-25 07:08:09 UTC
Permalink
OK, ich hab mich vielleicht falsch ausgedrückt, ich möchte
zum Schluss so eine Tabelle haben:

typ|anzahl zeitraum1|anzahl zeitraum2|anzahl zeitraum3
a | 3 | 5 | 2
b | 9 | 0 | 7


also eine Abfrage über mehrere Zeiträume die mir die Anzahl der Teile
im jeweiligen Zeitraum ausgibt ich möchte nicht jeden Zeitraum einzeln
abfragen,
weil ich das Ergebnis in einer Zeile haben möchte

(siehe Original-Query in meinem ersten Post)
Dirk Mika
2003-06-30 09:30:22 UTC
Permalink
Hallo,
Post by Tom
OK, ich hab mich vielleicht falsch ausgedrückt, ich möchte
typ|anzahl zeitraum1|anzahl zeitraum2|anzahl zeitraum3
a | 3 | 5 | 2
b | 9 | 0 | 7
also eine Abfrage über mehrere Zeiträume die mir die Anzahl der Teile
im jeweiligen Zeitraum ausgibt ich möchte nicht jeden Zeitraum einzeln
abfragen,
weil ich das Ergebnis in einer Zeile haben möchte
Evtl. kannst du etwas machen wie:

select
typ, sum(t1), sum(t2), sum(t3)
from
(
Select
typ, count(*) t1, 0 t2, 0 t3
from
...
where
<Bedingung Zeitraum 1>
union
select
typ, 0 t1, count(*) t2, 0 t3
from
...
where
<Bedingung Zeitraum 2>
union
select
typ, 0 t1, 0 t2, count(*) T3
from
...
where
<Bedingung Zeitraum 3>
)

Gruß
Dirk Mika
Dieter Nöth
2003-06-30 12:07:50 UTC
Permalink
Post by Tom
typ|anzahl zeitraum1|anzahl zeitraum2|anzahl zeitraum3
a | 3 | 5 | 2
b | 9 | 0 | 7
also eine Abfrage über mehrere Zeiträume die mir die Anzahl der Teile
im jeweiligen Zeitraum ausgibt ich möchte nicht jeden Zeitraum einzeln
abfragen,
weil ich das Ergebnis in einer Zeile haben möchte
Klassischer Fall für CASE:

select gsk, wbaugruppe.zeitbaust,wbaugruppe.gruppe_bg,
sum(case when ptadat between '01.JAN.02' and '01.JAN.03'
then 1 else 0 end) AS GanzesJahr,
sum(case when ptadat between '01.apr.02' and '01.jun.02'
then 1 else 0 end) AS ZweitesQuartal,
sum(case when ptadat between '01.jul.02' and '01.sep.02'
then 1 else 0 end) AS DrittesQuartal
from wbaugruppe,wmodul
where wbaugruppe.zeitbaust like 'A3'
and ptadat between '01.JAN.02' and '01.JAN.03'
and wmodul.bg_id_ein=wbaugruppe.bg_id
group by gsk,wbaugruppe.zeitbaust,gruppe_bg
order by gsk;

Falls dein DBMS kein CASE kennt, schau nach DECODE/IIF o.ä.

Dieter

Lesen Sie weiter auf narkive:
Loading...