按时间戳的日期分组

时间:2010-12-14 16:22:10

标签: sql mysql group-by aggregate-functions

如何在mysql中按时间戳列的日期部分进行分组,并仍然利用其中的索引?

当然,您可以使用

等解决方案
select date(thetime) from mytable group by date(thetime)

然而,此查询将无法在时间上使用索引,但在使用函数对列进行转换之前,将需要临时表。

+----+-------------+-------------+-------+---------------+-------------+---------+------+-------+----------------------------------------------+
| id | select_type | table       | type  | possible_keys | key         | key_len | ref  | rows  | Extra                                        |
+----+-------------+-------------+-------+---------------+-------------+---------+------+-------+----------------------------------------------+
|  1 | SIMPLE      | mytable     | index | NULL          | thetime     | 4       | NULL | 48183 | Using index; Using temporary; Using filesort | 
+----+-------------+-------------+-------+---------------+-------------+---------+------+-------+----------------------------------------------+

理论上,它没有理由不能对该列的索引使用范围扫描而不需要临时表。是否有任何语法可以说服查询优化器执行查询来执行此操作?

1 个答案:

答案 0 :(得分:1)

据我所知,数据库已经做了你想要的?正在扫描索引(而不是表格本身),如xplan中所示。

但是你无法解决在分组(不同)操作期间需要一个中间表来保存日期的事实。