Soy totalmente nuevo, y no pude encontrar una buena manera de hacer esto en ningún lado. Tengo una tabla de base de datos que contiene estadísticas que se registran en distintos momentos durante la semana. La semana de informes comienza el jueves. La tabla contiene una columna de fecha y fecha (fecha) que almacena cuándo se registraron los datos.
Necesito extraer los datos de una semana determinada (las semanas de informes comienzan el jueves). He escrito la siguiente consulta:
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
Esto parece funcionar en las pruebas iniciales. Pero no estoy seguro de que sea la mejor manera de hacerlo. No sé mucho sobre el rendimiento de MySQL, pero habrá más de cien mil registros para filtrar. ¿Esta consulta será muy lenta debido a la cantidad de condiciones verificadas?
La función NOW () se usa al extraer el informe más reciente; sin embargo, en algunos casos tendré que hacer informes durante otras semanas, por lo que sustituiría otra fecha en el lugar.
Además, hacerlo de esta manera requiere volver a escribir la consulta si cambia la semana del informe, por ejemplo, el día de inicio cambia al miércoles.
No puedo usar la función WEEK () porque solo puedes comenzar una semana en Sun o Mon con ella.
¡Cualquier idea para mejorar esta consulta es muy apreciada!
Otras notas: Actualmente usando MariaDB 5.3.