2013-12-24 4 views
0

помощь. У меня есть этот запрос в mysql. То, что он делает, это комбинировать поля из трех таблиц. Одно поле (Продолжительность (h)) вычитает время окончания и время начала. Майские данные времени представлены только в виде времени и не даты. Поэтому я решил использовать функцию timediff. Это хорошо работает на время в тот же день. Но не разница во времени, как 00:00 - 23:30; в этом случае я получаю ответ -23.5. Что я могу сделать, чтобы исправить это. Заранее спасибо.Время вычитания с использованием timediff

SELECT `tblproductiondata`.`productionDay` , `tbllinestoppagecategories`.`category` , `tblshifts`.`ID` , `tblstoppagedescriptions`.`endTime` , `tblstoppagedescriptions`.`startTime` , IFNULL(ROUND(`tblstoppagedescriptions`.`duration(mins)` /60, 2) , ROUND((
TIME_TO_SEC(TIMEDIFF(`tblstoppagedescriptions`.`endTime` , `tblstoppagedescriptions`.`startTime`)) /3600) , 2) 
) AS `Duration (h)` 
FROM (
`tbllinestoppagecategories` 
INNER JOIN `tblstoppagereasons` ON `tbllinestoppagecategories`.`categoryID` = `tblstoppagereasons`.`stoppagecategory` 
) 
INNER JOIN (
`tblshifts` 
INNER JOIN (
`tblproductiondata` 
INNER JOIN `tblstoppageDescriptions` ON `tblproductiondata`.`productionID` = `tblstoppagedescriptions`.`prodDate` 
) ON `tblshifts`.`ID` = `tblproductiondata`.`shiftName` 
) ON `tblstoppageReasons`.`resID` = `tblstoppagedescriptions`.`stoppageReason` 
WHERE (
(
(
`tbllinestoppagecategories`.`category` 
) <> "Changeover Maintenance Activities" 
) 
) 
ORDER BY `tblproductiondata`.`productionDay` ASC 
+0

какие поля содержат дату начала и дату окончания? – arilia

+0

'tblstoppagedescriptions' .'startTime' и' tblstoppagedescriptions' .'endTime'. Я занимаюсь только временами в этих полях –

+0

эти два поля на время, но вы сохраняете дату (день) в каком-то другом поле? Чтобы вычислить разницу во времени, вы должны знать две даты. – arilia

ответ

0

попробовать

TIME_TO_SEC(
    TIMEDIFF( 
     CONCAT(tblproductiondata.productionDay, ' ', tblstoppagedescriptions.endTime), 
     CONCAT(tblproductiondata.productionDay, ' ', `tblstoppagedescriptions`.`startTime`) 
    ) 
) 
+0

Спасибо Arilla, запрос все еще дает те же результаты. Я понял, что даже после конкатенации результат будет таким же из-за того, как структурирована таблица tblproductiondata. данный рабочий день говорит 24/12/2013 с 24/12/2013 06:00 до 25/12/2013 06:00. Если даже конкатенация productionDay со временем, функция timediff, работающая со временем (00:00 и 23:30), по-прежнему будет давать тот же результат, поскольку дата такая же. Я просто изменил время на формат datetime. Спасибо за вашу помощь. Я бы не понял этого без этого. –

+0

Скажем, я заменил данные от времени до даты и времени. Функция timediff теперь дает null в результате. Любые идеи, почему –

+0

, пожалуйста, отредактируйте ваш вопрос с помощью нового кода – arilia

Смежные вопросы