MYSQL一天内的第一个和最后一个日期时间

时间:2014-12-02 18:45:28

标签: mysql datetime

我有一个包含3天数据的表(大约4000行)。这3组数据均来自30分钟的会议。我希望每次会议都有开始和结束时间。

我目前使用这个SQL,但速度很慢(即使只有4000条记录)。日期时间表已编制索引,但我认为由于从datetime到date的转换,索引未正确使用。 tablelayout是固定的,所以我不能改变它的任何部分。查询大约需要20秒才能运行..(并且每天都会越来越长)。任何人都有一些很好的技巧可以让它更快?

select distinct
date(a.datetime) datetime,
(select max(b.datetime) from bike b where date(b.datetime) = date(a.datetime)),
(select min(c.datetime) from bike c where date(c.datetime) = date(a.datetime))
from bike a

enter image description here

2 个答案:

答案 0 :(得分:4)

也许我错过了什么,但是......

OP查询返回的结果是否等同于此查询的结果:

  SELECT DATE(a.datetime) AS datetime
       , MAX(a.datetime)  AS max_datetime
       , MIN(a.datetime)  AS min_datetime
    FROM bike a
   GROUP BY DATE(a.datetime)

答案 1 :(得分:0)

亚历克斯,警告,这在键入的“徒手”中可能会有一些语法问题。但有点表明我试图传达的东西。

select distinct
date(a.datetime) datetime,
(select max(b.datetime) from bike b where b.datetime between date(a.datetime) and (date(a.datetime) + interval 1 day - interval 1 second)),
(select min(c.datetime) from bike c where c.datetime between date(a.datetime) and (date(a.datetime) + interval 1 day - interval 1 second))
from bike a

它不是比较日期(b.datetime),而是允许将实际b.datetime与从a.datetime计算的范围进行比较。希望这可以帮助你,并且不会使事情变得更加模糊。