[MySQL] Minimale und maximale Uhrzeit über Mitternachtsgrenze hinweg ermitteln

chris4712

Erfahrenes Mitglied
Hallo!

Ich habe ein etwas ungewöhnliches Anliegen und brauche eure Hilfe: Ich baue für eine Kneipe ein Kassenbuch. Darin soll pro "Tag" der Umsatz ausgelesen werden könne. Wobei hier "Tag" extra in Anführungsstrichen steht: Manchmal öffnet die Kneipe um 17 Uhr und macht am folge Tag um 3 Uhr zu, manchmal aber auch schon um 23 Uhr des selben Tages.

Ich muss also irgendwie ermitteln wann es an dem jeweiligen Tag los ging, und wenn sie aufgehört haben. Alle Verkäufe stehen mit einem Zeitstempel in der Form "JJJJ-MM-TT SS:MM:ss" in der Datenbank.

Im Moment habe ich nicht so die richtige Idee wie ich es angehen könnte und wäre deswegen für Tipps sehr dankbar!

Gruß

Christian
 
Ist nicht ganz einfach, da du kein 'Arbeitstag' drin hast.
Gibt es ein Zeitfenster in dem die Kneipe sicher geschlossen hat? Also immer von 04 bis 11 zum Beispiel?
Oder eine Angabe wie lange dass die Kneipe zwischendurch mindestens geschlossen sein soll?
 
Oder eine Angabe wie lange dass die Kneipe zwischendurch mindestens geschlossen sein soll?

Leider nein. Meine Idee (laut meinem Stand nur mit MySQL + PHP zu realisieren): Tagesmaximum auslesen (Bsp.: 23:57). Auf diesen Wert x Stunden (z.B. 2) addieren. Für den nächsten Tag das Minimum auslesen. Dann schauen ob das Minimum größer als 23:57 + 2 Stunden ist --> Neuer "Tag", alles OK.

Wenn nein (wäre dann 2 Uhr nachts) auf das ausgelesene Ergebnis noch mal 2 Stunden addieren und sich so vorangeln.

Setzt aber voraus dass mindestens 2 Stunden nichts verkauft wurde um einen "neuen Tag" zu signalisieren.

Alternative Überlegung: Beim Beenden des Kassenbuchs eine Abfrage: "Feierabend****" Wenn ja wird einfach die Uhrzeit in der DB gespeichert, und ich lese nur noch die Daten zwischen den Einträgen aus. Nachteil dabei: Die Software läuft schon 1,5 Jahre. Müsste also viele Tagesabschlüsse nachtragen.
 
Hey!
Muss noch mal das Thema rauskramen:
Ich komme nicht weiter. Also würde ich nun doch davon ausgehen das jeden Mittag um 12 Uhr ein neuer Tag beginnt.

Mit
Code:
SELECT
  DATE_FORMAT(Zeit, '%Y-%m-%d') AS Tag,
  MIN(Zeit) AS Minimum,
  MAX(Zeit) AS Maximum
FROM
  verkauf
WHERE
   Zeit
BETWEEN '2013-09-01 12:00:00' AND ('2013-09-01 12:00:00' + INTERVAL 1 DAY)
GROUP BY
  DATE_FORMAT(Zeit, '%Y-%m-%d')
ORDER BY
  Tag

Läuft das schon ganz gut. Aber wie baue ich das nun noch so um dass er es automatisch für jeden Tag macht, der in der DB steht?

Grüße!
 
Ich habe es mal mit folgendem versucht:
Code:
SELECT
  DATE_FORMAT(Zeit, '%Y-%m-%d 12:00:00') AS Tag,
(
SELECT
  MIN(Zeit)
FROM
  verkauf
WHERE
   Zeit
BETWEEN Tag AND (Tag + INTERVAL 1 DAY)
) AS Minimum
FROM
  verkauf
GROUP BY
  DATE_FORMAT(Zeit, '%Y-%m-%d')
ORDER BY
  Tag


Abfrage läuft und läuft und läuft und...
Da ist wohl was falsch!? :)
 
Diese Verschachtelung ist äusserst ungünstig. Dein Subquery im SELECT-Teil hat ja gar kein Bezug zu deinem äusseren Query.

Ich würde es so probieren (ungetestet)
SQL:
SELECT
	calc_day
	MIN(d.zeit) AS min_time,
	MAX(d.zeit) AS max_time
FROM
	(
		SELECT
			v.*,
			-- Minus 12 Stunden um auf den Arbeitstag zu kommen
			v.tag - INTERVAL 12 HOUR AS calc_day
		FROM
			verkauf
	) d
GROUP BY 
	-- Hier nach berechnetem Tag Gruppierel
    d.calc_day
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück