Spezielle Datumsabfrage

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
Marco Schwarz [ Mi, 05 Dezember 2007 07:36 ] [ ID #1886177 ]

Re: Spezielle Datumsabfrage

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
Andreas Kretschmer [ Mi, 05 Dezember 2007 08:13 ] [ ID #1886178 ]

Re: Spezielle Datumsabfrage

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 ;-)
Christian Kirsch [ Mi, 05 Dezember 2007 08:31 ] [ ID #1886179 ]

Re: Spezielle Datumsabfrage

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
Andreas Kretschmer [ Mi, 05 Dezember 2007 08:40 ] [ ID #1886180 ]

Re: Spezielle Datumsabfrage

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
Marco Schwarz [ Mi, 05 Dezember 2007 10:17 ] [ ID #1886181 ]
Datenbanken » de.comp.datenbanken.mysql » Spezielle Datumsabfrage

Vorheriges Thema: count Ausgabe bei vergleichen zweier Tabellen auch Ausgabe wenn keine Zuweisung vorhanden ist
Nächstes Thema: Datumsabfrage Jahrestage