我懷疑有一種方法可以使其更快,但它超出了我的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