2017-01-23 4 views
0

Ich habe eine MySQL-Abfrage, die jedoch läuft es einfach hängt und nicht zu stoppen. Ich bin mir nicht sicher, wo die Abfrage bricht.MySQL-Abfrage hängt

SELECT 
TIMESTAMPDIFF(SECOND, '1970-01-01 00:00:00', f.Datestamp) AS Epoch, 
f.value AS `Usage`, 
q.Name AS Quantity, 
q.QuantityID, 
units, 
PrimeDataItem, 
dd.Description 
FROM SourceChannels c 
JOIN UsageHhourly f ON c.ChanID = f.ChanID 
JOIN Quantities q ON c.QuantityID = q.QuantityID 
LEFT JOIN DigitalDescriptions dd ON ((c.DigitalDescriptionID = dd.DigitalDescriptionID) 
AND f.value = (CASE WHEN dd.Value REGEXP '^[0-9]' = 1 then dd.Value ELSE -1 END)) 
WHERE 
c.EquipmentID = 1496 
AND f.DateStamp >= '2016-12-28 00:00:00' 
AND f.DateStamp < '2017-01-04 00:00:00' 
ORDER BY q.QuantityID, f.datestamp 
+1

Haben Sie _EXPLAIN_ verwendet? –

+0

Mit Respekt haben Sie nicht genug Informationen für uns gegeben, um Ihnen zu helfen. Bitte lesen Sie dies. http://meta.stackoverflow.com/a/271056/ Dann, bitte [bearbeiten] Sie Ihre Frage. –

+1

Können Sie Ihre Tabellenstruktur hier setzen? –

Antwort

0

Die Frage liefert keine weiteren Informationen zur Beleuchtung. Versuchen Sie, Ihre Abfrage wie im folgenden Beispiel zu ändern.

SELECT 
TIMESTAMPDIFF(SECOND, '1970-01-01 00:00:00', `f`.`Datestamp`) AS `Epoch`, 
`f`.`value` AS `Usage`, 
`q`.`Name` AS `Quantity`, 
`q`.`QuantityID`, 
`c`.`units`, 
`c`.`PrimeDataItem`, 
`dd`.`Description` 
FROM `SourceChannels` `c` 
INNER JOIN `UsageHhourly` `f` ON `c`.`ChanID` = `f`.`ChanID` 
INNER JOIN `Quantities` `q` ON `c`.`QuantityID` = `q`.`QuantityID` 
LEFT JOIN `DigitalDescriptions` `dd` ON `c`.`DigitalDescriptionID` = `dd`.`DigitalDescriptionID` 
WHERE 
`f`.`value` = IF((dd.Value REGEXP '^[0-9]'),1,-1) 
AND `c`.`EquipmentID` = 1496 
AND `f`.`DateStamp` BETWEEN '2016-12-28 00:00:00' AND '2017-01-04 00:00:00' 
ORDER BY `q`.`QuantityID`, `f`.`datestamp`; 
+0

Vorsicht: Wenn Sie etwas von 'LEFT JOIN ... ON' nach' WHERE' verschieben, kann das Resultset geändert werden. –

+0

@RickJames ja es kann, deshalb habe ich geschrieben, dass die Frage nicht mehr Enelighting-Informationen bietet. Es gibt keine Informationen zu den in der Abfrage verwendeten MySQL-Tabellen. Sie haben Recht, dies zu erwähnen. –

+0

@RickJames Ich denke, Sie würden zustimmen, dass der fehlgeschlagene Teil in dieser Abfrage ist "LINKE JOIN DigitalDescriptions dd ON (0) AND f.value = (FALL WENN dd.Value REGEXP '^ [0- 9] '= 1 dann dd.Value ELSE -1 END)) ' –