Eu sou um novato total e não consegui encontrar uma boa maneira de fazer isso em qualquer lugar. Eu tenho uma tabela de banco de dados que contém estatísticas que são registradas em vários momentos da semana. A semana do relatório começa na quinta-feira. A tabela contém uma coluna de data e hora (data) que armazena quando os dados foram registrados.
Preciso extrair os dados para uma determinada semana (as semanas de relatório começam na quinta-feira). Eu escrevi a seguinte 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
Isso parece funcionar no teste inicial. Mas não tenho certeza de que é a melhor maneira de fazer isso. Não sei muito sobre o desempenho do MySQL, mas haverá mais de cem mil registros para filtrar. Essa consulta será muito lenta devido ao número de condições verificadas?
A função NOW () é usada ao extrair o relatório mais atual - no entanto, em alguns casos, precisarei fazer relatórios por outras semanas - para substituir outra data no local.
Além disso, fazê-lo dessa maneira exige reescrever a consulta se a semana do relatório for alterada - digamos que o dia inicial mude para quarta-feira.
Não posso usar a função WEEK () porque você só pode iniciar uma semana no Sun ou Mon com ela.
Todas as idéias para melhorar esta consulta são muito apreciadas!
Outras notas: Atualmente usando o MariaDB 5.3.