我有以下查詢,總和時間差我希望它將負時差設置爲零或忽略它。在MySQL SUM中實現IF時間戳差異
SELECT
SUM(TIMESTAMPDIFF(MINUTE, GREATEST('2017-10-16 16:00:00',created_at),LEAST('2017-10-17 00:00:00',IFNULL(closed,NOW()))
)) AS totalWork, created_at, closed
FROM cavity_actions WHERE cavity_id = 52 AND action_id = 10 AND job_id = 42 GROUP BY created_at, closed
該查詢將返回:
totalWork created_at closed
-12588 2017-10-07 21:12:48 2017-10-07 22:11:08
480 2017-10-07 22:17:45 NULL
我需要忽略負值或將其設置爲零。
我試圖在WHERE子句中使用totalWork
別名,但會生成未知列錯誤。
有什麼辦法可以設置每個TIMESTAMPDIFF()
輸出的變量,然後在IF子句中使用它?
我曾嘗試:
SELECT
SUM(@td := TIMESTAMPDIFF(MINUTE, GREATEST('2017-10-16 16:00:00',created_at),LEAST('2017-10-17 00:00:00',IFNULL(closed,NOW()))
) IF(td > 0,td,0)) AS totalWork, created_at, closed
FROM cavity_actions WHERE cavity_id = 52 AND action_id = 10 AND job_id = 42 GROUP BY created_at, closed
但它返回的錯誤。
使用having子句將其刪除。 totalWork> 0; –
會有(SUM(TIMESTAMPDIFF(MINUTE,GREATEST('2017-10-16 16:00:00',created_at),LEAST('2017-10-17 00:00:00',IFNULL(關閉,NOW ))))))> 0'工作? – Nope
@Fran擺放產生錯誤。然而,戈登解決方案似乎是完美的 – SaidbakR