我在MySQL中有下表记录了每天发生的事情的事件计数
event_date event_count
2011-05-03 21
2011-05-04 12
2011-05-05 12
我希望能够按日期范围和星期几有效地查询此内容。 例如-"五月的星期二的event_count是多少?"
当前,event_date字段是日期类型。 MySQL中是否有任何功能可以让我按星期几查询此列,还是应该在表中添加另一列来存储星期几?
该表将包含成千上万的行,因此如果有选择,我将选择最有效的解决方案(而不是最简单的解决方案)。
感谢您的书面问题。 仅供参考-问候和标题标签在SO上不受欢迎,因为它不是论坛。 希望您找到想要的答案。
在查询中使用DAYOFWEEK,例如:
SELECT * FROM mytable WHERE MONTH(event_date) = 5 AND DAYOFWEEK(event_date) = 7;
这将查找五月的星期六的所有信息。
为了获得最快的读取速度,请存储星期几(以及您需要的其他任何时间)中的非规范化字段。 这样,您可以为列编制索引并避免全表扫描。
只需先尝试上面的方法,看看它是否适合您的需求,如果不合适,请添加一些额外的列并在写入时存储数据。 只需注意更新异常(如果更改event_date,请确保更新day_of_week列)。
请注意,非规范化字段将增加写操作所需的时间,增加写操作的时间,并占用更多空间。 确保您确实需要该好处,并且可以衡量它是否对您有帮助。
对于2012年的日期,DAYOFWEEK在2008年之后不被认可。对于2012年的日期,请使用DAY。 很好的响应,只是想为其他人寻找注释,以了解如何在较新版本的SQL Server上执行此操作。
如果要用文本表示星期几,请使用DAYNAME()函数。
检查DAYOFWEEK()函数