Je suis un newb total et je n'ai pas pu trouver un bon moyen de le faire n'importe où. J'ai une table de base de données qui contient des statistiques enregistrées à différents moments de la semaine. La semaine du rapport commence jeudi. Le tableau contient une colonne d'horodatage (date) qui stocke le moment où les données ont été enregistrées.
Je dois extraire les données pour une semaine donnée (les semaines de rapport commencent le jeudi). J'ai écrit la requête suivante:
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
Cela semble fonctionner sur les tests initiaux. Mais je ne suis pas sûr que ce soit la meilleure façon de procéder. Je ne sais pas grand chose sur les performances de MySQL, mais il y aura plus de cent mille enregistrements à filtrer. Cette requête sera-t-elle vraiment lente en raison du nombre de conditions vérifiées?
La fonction NOW () est utilisée lors de l'extraction du rapport le plus récent - cependant, dans certains cas, je devrai faire des rapports pour d'autres semaines - donc je remplacerais une autre date à la place.
En outre, pour ce faire, vous devez réécrire la requête si la semaine de rapport change - par exemple, le jour de début passe à mercredi.
Je ne peux pas utiliser la fonction WEEK () car vous ne pouvez commencer qu'une semaine le dimanche ou le lundi avec.
Toutes les idées pour améliorer cette requête sont très appréciées!
Autres notes: utilise actuellement MariaDB 5.3.