Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL和时间戳差异中实现IF_Mysql_Sql - Fatal编程技术网

在MySQL和时间戳差异中实现IF

在MySQL和时间戳差异中实现IF,mysql,sql,Mysql,Sql,我有以下查询,求和时差,我希望它将负时差设置为零或忽略它 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_acti

我有以下查询,求和时差,我希望它将负时差设置为零或忽略它

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
但是它返回错误。

不需要
IF()
(或者
CASE
,这是ANSI标准)。您可以使用
greest()

不需要
IF()
(或
CASE
,这是ANSI标准)。您可以使用
greest()


使用having子句删除它。总功>0;
SUM(TIMESTAMPDIFF(MINUTE,maxist('2017-10-16 16:00:00',created_至少,'2017-10-17 00:00:00',IFNULL(closed,NOW()))>0
work?@Fran生成错误。然而,Gordon的解决方案似乎是完美的,因为它使用子句来删除它。总功>0;
SUM(TIMESTAMPDIFF(MINUTE,maxist('2017-10-16 16:00:00',created_至少,'2017-10-17 00:00:00',IFNULL(closed,NOW()))>0
work?@Fran生成错误。然而,Gordon解决方案似乎是完美的,但为什么是COALESCE而不是IFNULL?@SaidbakR
COALESCE()
是所有(真实)数据库中可用的ANSI标准功能。但为什么COALESCE而不是IFNULL?@SaidbakR
COALESCE()
是所有(真实)数据库中可用的ANSI标准功能。
SELECT SUM(GREATEST(TIMESTAMPDIFF(MINUTE,
                                  GREATEST('2017-10-16 16:00:00', created_at),
                                  LEAST('2017-10-17 00:00:00', COALESCE(closed, NOW()))

                                 ), 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