我是一个完全的新手,我在任何地方都找不到这样做的好方法。我有一个数据库表,其中包含一周内不同时间记录的统计信息。报告周从星期四开始。该表包含一个日期戳列(日期),用于存储记录数据的时间。
我需要提取给定一周的数据(报告周从星期四开始)。我写了以下查询:
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
这似乎适用于初始测试。但我不确定这是最好的方法。我对 MySQL 的性能了解不多,但是会有超过十万条记录需要过滤。由于检查的条件数量,这个查询真的很慢吗?
NOW() 函数在提取最新报告时使用 - 但是,在某些情况下,我需要在其他几周内进行报告 - 所以我会在该位置替换另一个日期。
此外,如果报告周发生更改,则以这种方式执行此操作需要重新编写查询 - 例如开始日更改为星期三。
我不能使用 WEEK() 函数,因为你只能在周日或周一用它开始一周。
非常感谢任何改进此查询的想法!
其他说明:目前使用 MariaDB 5.3。