Spezielle Datumsabfrage
am 05.12.2007 07:36:27 von Marco Schwarz
Hallo NG,
habe mal ne Frage, da ich irgendwie den Wald vor Bäumen nicht sehe.
Also eine Tabelle hat 2 Spalten vom Type Date:
- online und
- offline
Ich möchte mit einer Abfrage, wenn möglich, folgendes erreichen:
Ich habe eine Monatsweise Abfrage der Tabelle und möchte alle Einträge, die
in diesem Monat aktiv geworden sind, aktiv sind oder inaktiv geworden sind.
Beispiel:
- Eine Reihe hat den Wert 21.05.2007 für online und 2.12.2007 für offline
Theoretisch komme ich so zu folgendem bei dieser Spalte:
Monat Mai:
SELECT *** WHERE online BETWEEN 2007-05-01 AND 2007-05-31
Monat Juni:
SELECT *** WHERE online < 2007-06-01 AND offline > 2007-06-30
.....
Monat Dezember:
SELECT *** WHERE offline BETWEEN 2007-12-01 AND 2007-12-31
Das ist natürlich nicht der richtige Weg. Nur wie stelle ich das an?
Marco
Re: Spezielle Datumsabfrage
am 05.12.2007 08:31:25 von Christian Kirsch
Andreas Kretschmer schrieb:
> begin Marco Schwarz schrieb:
>> Hallo NG,
>>
>> habe mal ne Frage, da ich irgendwie den Wald vor Bäumen nicht sehe.
>> Also eine Tabelle hat 2 Spalten vom Type Date:
>> - online und
>> - offline
>>
>> Ich möchte mit einer Abfrage, wenn möglich, folgendes erreichen:
>> Ich habe eine Monatsweise Abfrage der Tabelle und möchte alle Einträge, die
>> in diesem Monat aktiv geworden sind, aktiv sind oder inaktiv geworden sind.
>
> test=*# select * from aktiv;
> id | online | offline
> ----+------------+------------
> 1 | 2007-05-21 | 2007-12-02
> 2 | 2007-04-21 | 2007-12-02
> 3 | 2007-04-21 | 2007-05-02
> (3 rows)
>
> test=*# select id,
> online,
> offline,
> case when date_trunc('month',online) = date_trunc('month','2007-05-01'::date) then 't'::bool else 'f'::bool end as wurde_online,
> case when date_trunc('month',offline)=date_trunc('month','2007-05-01': :date) then 't'::bool else 'f'::bool end as wurde_offline,
> case when online <= '2007-05-01'::date and date_trunc('month',offline) > date_trunc('month','2007-05-01'::date) then 't'::bool else 'f'::bool end as durchgaenging_online
> from aktiv;
Zwar sehr hübsch, aber nicht für MySQL geeignet. MySQL hat eigene
Funktionen, um den Monat aus einem Datum zu extrahieren. Die sind in der
Dokumentation im Abschnitt Date & Time functions beschrieben.
CASE wiederum kennt MySQL auch ;-)
Re: Spezielle Datumsabfrage
am 05.12.2007 10:17:22 von Marco Schwarz
Andreas Kretschmer wrote:
> begin Christian Kirsch schrieb:
>> Zwar sehr hübsch, aber nicht für MySQL geeignet. MySQL hat eigene
>> Funktionen, um den Monat aus einem Datum zu extrahieren. Die sind in der
>> Dokumentation im Abschnitt Date & Time functions beschrieben.
>
> Danke, ja, das wollt ich noch dazuschreiben. Ich denke, als Zielrichtung
> sollte das aber dem Fragesteller durchaus hilfreich sein.
Hebe Deine Zielrichtung genutzt und zu folgender funktionierender Abfrage
gekommen:
WHERE DATE_FORMAT('2007-05-01','%Y-%m') BETWEEN DATE_FORMAT(online,'%Y-%m')
AND DATE_FORMAT(offline,'%Y-%m')
Marco