在MySQL 5.6中: 表“ magnetInfo”包含来自不同设备的基于时间的数据。下面的SQL语句为同一设备的最后一个日期选择每个设备的min sensor1数据。
explain select m._sysID, Date(m._datetime), min(sensor1)
from magnetInfo m
inner join
(SELECT _sysID, Date(max(_datetime)) as d FROM magnetInfo where _sysID in ("sysID_01", "sysID_02") group by _sysID) t
on m._sysID = t._sysID and Date(m._datetime) = t.d
group by m._sysID order by NULL;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 2644 Using temporary
1 PRIMARY m ref magnetInfoIndex magnetInfoIndex 309 t._sysID 1 Using index condition
2 DERIVED magnetInfo range magnetInfoIndex magnetInfoIndex 302 NULL 2644 Using where; Using index for group-by
DERIVED select的结果只有两行,但是从“ derived2”中进行选择的“行”具有与DERIVED select的值相同的值(2644),这就是为什么? 我尝试过其他类似的SQL,它们始终具有相同的值。顺便说一下,关于优化上面的SQL有什么建议吗?