2017-01-23 1 views
0

J'ai une requête mysql qui s'exécute mais elle s'arrête et ne s'arrête pas. Je ne sais pas où la requête se casse.Requête MySQL suspendue

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

Avez-vous utilisé _EXPLAIN_? –

+0

En toute déférence, vous n'avez pas donné assez d'informations pour que nous puissions vous aider. Lisez ceci, s'il vous plaît. http://meta.stackoverflow.com/a/271056/ Ensuite, s'il vous plaît [modifier] votre question. –

+1

Pouvez-vous mettre votre structure de table ici? –

Répondre

0

La question ne fournit pas d'informations supplémentaires sur l'éclairage. Essayez de modifier votre requête comme dans l'exemple ci-dessous.

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

Attention: Déplacer quelque chose de 'LEFT JOIN ... ON' à' WHERE' peut changer le jeu de résultats. –

+0

@RickJames oui il peut, c'est pourquoi j'ai écrit que la question ne fournit pas plus d'informations en-éclairage. Il n'y a aucune information sur les tables MySQL utilisées dans la requête. Vous avez raison de le mentionner. –

+0

@RickJames je pense que vous seriez d'accord que la partie défaillante dans cette requête est 'LEFT JOIN DigitalDescriptions dd ON ((c.DigitalDescriptionID = dd.DigitalDescriptionID) et f.value = (CASE WHD dd.Value REGEXP '^ [0- 9] '= 1 alors dd.Value ELSE -1 END)) ' –