我怀疑有一种方法可以使其更快,但它超出了我的MySQL限制。有没有办法加快这个查询?
我有一张表,它由从某些传感器收集的数据组成,按活动为基础以1Hz的比率进行活动。表列是activityId,transducerId(数据来自哪个传感器),传感器正在报告的值以及时间戳。一个给定的活动可以有0 - 24个传感器。
我需要一个新的表命名为含该传感器的数据的每个传感器的列,和:等(取决于传感器的数量给予或采取行)该数据的
一个第二看起来日期时间列。例如:
目前我得到这个表有一个很长的一系列查询和连接。下面是我使用的查询:
SELECT cd.calculatedValue AS `301`, q1.`302` , q2.`303` , q3.`304` , q4.`305` , q5.`306` , q6.`307` , q7.`308` , q8.`309` , q9.`310` , q10.`311` , q11.`312` , q12.`313` , q13.`314` , cd.`datetime`
FROM
data cd
JOIN
(SELECT `calculatedValue` AS `302`, `datetime` FROM `data` WHERE `activityId` = 74 AND `transducerId` = 302) AS q1
ON cd.`datetime` = q1.`datetime`
JOIN
(SELECT `calculatedValue` AS `303`, `datetime` FROM `data` WHERE `activityId` = 74 AND `transducerId` = 303) AS q2
ON cd.`datetime` = q2.`datetime`
JOIN
(SELECT `calculatedValue` AS `304`, `datetime` FROM `data` WHERE `activityId` = 74 AND `transducerId` = 304) AS q3
ON cd.`datetime` = q3.`datetime`
JOIN
(SELECT `calculatedValue` AS `305`, `datetime` FROM `data` WHERE `activityId` = 74 AND `transducerId` = 305) AS q4
ON cd.`datetime` = q4.`datetime`
JOIN
(SELECT `calculatedValue` AS `306`, `datetime` FROM `data` WHERE `activityId` = 74 AND `transducerId` = 306) AS q5
ON cd.`datetime` = q5.`datetime`
JOIN
(SELECT `calculatedValue` AS `307`, `datetime` FROM `data` WHERE `activityId` = 74 AND `transducerId` = 307) AS q6
ON cd.`datetime` = q6.`datetime`
JOIN
(SELECT `calculatedValue` AS `308`, `datetime` FROM `data` WHERE `activityId` = 74 AND `transducerId` = 308) AS q7
ON cd.`datetime` = q7.`datetime`
JOIN
(SELECT `calculatedValue` AS `309`, `datetime` FROM `data` WHERE `activityId` = 74 AND `transducerId` = 309) AS q8
ON cd.`datetime` = q8.`datetime`
JOIN
(SELECT `calculatedValue` AS `310`, `datetime` FROM `data` WHERE `activityId` = 74 AND `transducerId` = 310) AS q9
ON cd.`datetime` = q9.`datetime`
JOIN
(SELECT `calculatedValue` AS `311`, `datetime` FROM `data` WHERE `activityId` = 74 AND `transducerId` = 311) AS q10
ON cd.`datetime` = q10.`datetime`
JOIN
(SELECT `calculatedValue` AS `312`, `datetime` FROM `data` WHERE `activityId` = 74 AND `transducerId` = 312) AS q11
ON cd.`datetime` = q11.`datetime`
JOIN
(SELECT `calculatedValue` AS `313`, `datetime` FROM `data` WHERE `activityId` = 74 AND `transducerId` = 313) AS q12
ON cd.`datetime` = q12.`datetime`
JOIN
(SELECT `calculatedValue` AS `314`, `datetime` FROM `data` WHERE `activityId` = 74 AND `transducerId` = 314) AS q13
ON cd.`datetime` = q13.`datetime`
WHERE cd.`activityId` = 74 AND cd.`transducerId` = 301
这发生在短短几分钟内数据的很长一段时间,切实会有数据的时间在表中,还有多达10多个传感器。
有没有更好的方法来做这个查询?
非常感谢。
我会说,因为你是转置表(转换行到列)。您应该按照需要显示的方式设计表格,或者进行一些后期处理以显示结果,但您无法使用该方法。但这只是我的看法。 –
另外,你可以显示'数据'表中的索引吗? –
MySQL没有像MSSQL那样的PIVOT功能,或者它可能会使这一点更容易一些。不过,正如@ D.Kasipovic所说,改变你的数据结构以更好地处理你的想法。 – paqogomez