Nach besonderen Zeiten gruppieren?

Nach besonderen Zeiten gruppieren?

am 02.09.2007 21:24:56 von Sebastian Suchanek

Hallo NG!

In einer MySQL-Datentabelle habe ich unter anderem eine
DATETIME-Spalte. Jetzt möchte ich die Daten dieser Tabelle so
abfragen (und weiterverarbeiten), daß die Ergebnisse nach
Einträgen mit "runden" Zeiten - also z.B. sekundengenau zu einer
vollen Stunde - und dem jeweiligen Rest gruppiert sind.

Die einzige funktionierende Lösung, die mir bislang eingefallen
ist, läuft über ein UNION:

SELECT COUNT(*) AS Anzahl, $weitereFelder
FROM Tabelle
WHERE MINUTE(Zeit)='0' AND SECOND(Zeit)='0'
AND $weitereBedingungen
UNION
SELECT COUNT(*) AS Anzahl, $weitereFelder
FROM Tabelle
WHERE (MINUTE(Zeit)<>'0' OR SECOND(Zeit)<>'0')
AND $weitereBedingungen

Allerdings finde ich UNIONs prinzipiell nicht besonders elegant
und speziell hier muß man natürlich darauf achten, daß die
Zusatzbedingungen bei beiden Abfragen gleich sind, um sinnvolle
Ergebnisse zu erhalten.
Seht Ihr andere Lösungsmöglichkeiten, die evtl. ohne UNION
auskommen?


Tschüs,

Sebastian

--
http://www.baumaschinen-modelle.net
http://www.schwerlast-rhein-main.de

Re: Nach besonderen Zeiten gruppieren?

am 03.09.2007 04:34:30 von Peter Schleif

Sebastian Suchanek schrieb:
>
> WHERE MINUTE(Zeit)='0' AND SECOND(Zeit)='0'

Pack das einfach in die GROUP-Spalte. Etwa so:


SELECT IF( MINUTE(Zeit)=0 AND SECOND(Zeit)=0,
'volle Stunde',
'Rest') AS RundeZeit,
COUNT(*) AS Anzahl,
$weitereFelder
FROM Tabelle
WHERE $weitereBedingungen
GROUP BY RundeZeit


Peter

Re: Nach besonderen Zeiten gruppieren?

am 03.09.2007 07:55:41 von Sebastian Suchanek

Peter Schleif schrieb:
> Sebastian Suchanek schrieb:
>> WHERE MINUTE(Zeit)='0' AND SECOND(Zeit)='0'
>
> Pack das einfach in die GROUP-Spalte. Etwa so:
>
>
> SELECT IF( MINUTE(Zeit)=0 AND SECOND(Zeit)=0,
> 'volle Stunde',
> 'Rest') AS RundeZeit,
> COUNT(*) AS Anzahl,
> $weitereFelder
> FROM Tabelle
> WHERE $weitereBedingungen
> GROUP BY RundeZeit

Tatsache, das funktioniert. Da muß ich wohl einen Tippfehler
eingebaut haben, als ich das selbst mit einem "AND-IF" versucht
habe. :-\
Danke Dir!


Tschüs,

Sebastian