我有一个包含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
答案 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计算的范围进行比较。希望这可以帮助你,并且不会使事情变得更加模糊。