Ich bin ein totaler Neuling, und ich konnte nirgendwo einen guten Weg finden, dies zu tun. Ich habe eine Datenbanktabelle, die Statistiken enthält, die zu verschiedenen Zeiten während der Woche aufgezeichnet werden. Die Berichtswoche beginnt am Donnerstag. Die Tabelle enthält eine Datenstempelspalte (Datum), in der gespeichert wird, wann die Daten aufgezeichnet wurden.
Ich muss die Daten für eine bestimmte Woche abrufen (Berichtswochen beginnen am Donnerstag). Ich habe folgende Abfrage geschrieben:
SELECT *
FROM `table`
WHERE 1 = CASE
WHEN WEEKDAY(NOW()) = 0 THEN DATEDIFF(NOW(),`date`) BETWEEN -2 AND 4
WHEN WEEKDAY(NOW()) = 1 THEN DATEDIFF(NOW(),`date`) BETWEEN -1 AND 5
WHEN WEEKDAY(NOW()) = 2 THEN DATEDIFF(NOW(),`date`) BETWEEN -0 AND 6
WHEN WEEKDAY(NOW()) = 3 THEN DATEDIFF(NOW(),`date`) BETWEEN -6 AND 0
WHEN WEEKDAY(NOW()) = 4 THEN DATEDIFF(NOW(),`date`) BETWEEN -5 AND 1
WHEN WEEKDAY(NOW()) = 5 THEN DATEDIFF(NOW(),`date`) BETWEEN -4 AND 2
WHEN WEEKDAY(NOW()) = 6 THEN DATEDIFF(NOW(),`date`) BETWEEN -3 AND 3
END
Dies scheint bei ersten Tests zu funktionieren. Ich bin mir jedoch nicht sicher, ob dies der beste Weg ist. Ich weiß nicht viel über die MySQL-Leistung, aber es werden über hunderttausend Datensätze gefiltert. Wird diese Abfrage aufgrund der Anzahl der überprüften Bedingungen sehr langsam sein?
Die NOW () -Funktion wird verwendet, wenn der aktuellste Bericht abgerufen wird. In einigen Fällen muss ich jedoch Berichte für andere Wochen erstellen, damit ich ein anderes Datum an die Stelle setzen kann.
Wenn Sie dies auf diese Weise tun, müssen Sie die Abfrage neu schreiben, wenn sich die Berichtswoche ändert - beispielsweise ändert sich der Starttag auf Mittwoch.
Ich kann die WEEK () -Funktion nicht verwenden, da Sie damit nur eine Woche am Sonntag oder Montag beginnen können.
Alle Ideen zur Verbesserung dieser Abfrage werden sehr geschätzt!
Sonstige Hinweise: Derzeit wird MariaDB 5.3 verwendet.