我想根据时间和日期从invgatepass获取max no,如果它返回null,那么我想根据不同的条件运行另一个查询,如果它也无法获取任何数据那么我想要获取' 1。
这是我想要的。
但在COALESCE
函数内,第二个参数不允许查询。
有人可以解决这个问题。
在检查php代码中的条件后,我不想使用两个单独的查询。
SELECT COALESCE(
MAX(SUBSTRING_INDEX(InwardNo, '-', -1))+1,
SELECT COALESCE
(
MAX(SUBSTRING_INDEX(InwardNo, '-', -1))+1,
1
)
FROM
invgatepass
WHERE
DATE(CreationDateTime)=CURDATE()
AND
(EXTRACT(HOUR FROM CreationDateTime)) < '17'
)
AS CODE FROM
invgatepass
WHERE
DATE(CreationDateTime)=DATE_SUB(CURDATE(), INTERVAL 1 DAY)
AND
(EXTRACT(HOUR FROM CreationDateTime)) >= '17'"
答案 0 :(得分:0)
在coalesce函数中允许子查询,但子查询必须括在大括号内。
看看这个演示:http://www.sqlfiddle.com/#!2/fb3d8/2
此查询编译正常,因为所有子查询都包含在大括号中:
SELECT coalesce(
( SELECT null ),
( SELECT id FROM test WHERE id = 10 ),
( SELECT id FROM test WHERE id = 4 ),
( SELECT id FROM test WHERE id = 2 )
) result
;
此查询会引发语法错误,因为第二个子查询周围没有大括号:
SELECT coalesce(
( SELECT null ),
SELECT id FROM test WHERE id = 10,
( SELECT id FROM test WHERE id = 4 ),
( SELECT id FROM test WHERE id = 2 )
) result
;
答案 1 :(得分:0)
旁注: 你不需要2 Coalesce:
coalesce ( null, null, 1)
与
大致相同coalesce ( null, coalesce ( null, 1))