Sou totalmente novato e não consegui encontrar uma boa maneira de fazer isso em nenhum lugar. Eu tenho uma tabela de banco de dados que contém estatísticas registradas em vários momentos da semana. A semana de relatórios começa na quinta-feira. A tabela contém uma coluna de carimbo de data (data) que armazena quando os dados foram registrados.
Preciso extrair os dados de uma determinada semana (as semanas de relatórios 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 se é a melhor maneira de fazer isso. Não sei muito sobre o desempenho do MySQL, mas haverá mais de cem mil registros para filtrar. Esta 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 para outras semanas - portanto, substituiria outra data no local.
Além disso, fazer dessa maneira requer reescrever a consulta se a semana do relatório mudar - digamos que o dia inicial mude para quarta-feira.
Não posso usar a função WEEK() porque você só pode começar uma semana no domingo ou na segunda-feira com ela.
Todas as idéias para melhorar esta consulta são muito apreciadas!
Outras notas: Atualmente usando MariaDB 5.3.