我的一些SQL语句如下:
IF(timediff(a.wo_finish_time,
IF(a.wo_failure_time <> '0000-00-00 00:00:00',
a.wo_failure_time,
a.wo_creation_time)) < 0,
0,
timediff(a.wo_finish_time,
IF(a.wo_failure_time <> '0000-00-00 00:00:00',
a.wo_failure_time,
a.wo_creation_time)))
正如你所看到的,它是冗长的,因为它的一部分出现了两次。所以我尝试了这样的用户定义变量:
if(@down_time := timediff(a.wo_finish_time,
IF(a.wo_failure_time <> '0000-00-00 00:00:00',
a.wo_failure_time,
a.wo_creation_time)) < 0,
0,
@down_time)
可能由于变量范围的不同,它不起作用。我知道我可以将这个@down_time变量声明放在SELECT
列表中,但这也会将它添加到输出列。我想一定有更好的方法,所以我发布这个问题,希望能找到更好的方法。
答案 0 :(得分:1)
您可以使用以下ssh -i mycert.pem testuser@myserver.com << 'SSHBLOCK'
pm2 logs --lines 100 &
pid=$!
sleep 3
kill $pid
SSHBLOCK
技巧:
GREATEST
不需要动态SQL的另一种解决方法是包装当前查询,然后子查询正确的值,如下所示:
SELECT GREATEST(0, TIMEDIFF(a.wo_finish_time,
IF(a.wo_failure_time <> '0000-00-00 00:00:00',
a.wo_failure_time,
a.wo_creation_time)))
FROM yourTable
如果您已经在使用这样的子查询或性能并不重要,那么第二个选项可能有意义。