Sono un principiante assoluto e non sono riuscito a trovare un buon modo per farlo da nessuna parte. Ho una tabella di database che contiene statistiche che vengono registrate in vari momenti della settimana. La settimana di riferimento inizia giovedì. La tabella contiene una colonna datestamp (data) che memorizza quando sono stati registrati i dati.
Devo estrarre i dati per una determinata settimana (le settimane di segnalazione iniziano il giovedì). Ho scritto la seguente query:
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
Questo sembra funzionare sui test iniziali. Ma non sono sicuro che sia il modo migliore per farlo. Non so molto sulle prestazioni di MySQL, ma ci saranno oltre centomila record da filtrare. Questa query sarà molto lenta a causa del numero di condizioni verificate?
La funzione NOW () viene utilizzata per estrarre il rapporto più recente, tuttavia, in alcuni casi dovrò fare rapporti per altre settimane, in modo da sostituire un'altra data nel luogo.
Inoltre, in questo modo è necessario riscrivere la query se la settimana del rapporto cambia, ad esempio il giorno di inizio cambia a mercoledì.
Non riesco a utilizzare la funzione WEEK () perché puoi iniziare solo una settimana su Sun o Lun con essa.
Tutte le idee per migliorare questa query sono molto apprezzate!
Altre note: attualmente in uso MariaDB 5.3.