我想根据时间和日期从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'"发布于 2013-12-01 01:47:35
允许在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
;发布于 2017-10-14 15:24:15
附注:您不需要2个Coalesce:
coalesce ( null, null, 1) 大致与
coalesce ( null, coalesce ( null, 1))https://stackoverflow.com/questions/20299462
复制相似问题