Spezielle Datumsabfrage

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:13:15 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

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 08:40:27 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

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