如何优先取isDone=0行的MAX(id),无结果时取isDone=1的MAX(id)
方案1:排序取首(全数据库兼容,逻辑最直观)
直接利用排序优先级实现需求,isDone为0的行会排在最前,同分组下id倒序取最新,取第一条即可:
SELECT id FROM ChatItem WHERE CaseInvoiceId = 160670 ORDER BY isDone ASC, id DESC LIMIT 1;
注:SQL Server/Access环境下把
LIMIT 1替换为TOP 1,Oracle环境替换为FETCH FIRST 1 ROW ONLY即可。
方案2:聚合函数实现(适合批量查询多CaseInvoiceId的场景)
用条件聚合加空值合并函数实现,无需排序:
SELECT COALESCE(MAX(CASE WHEN isDone = 0 THEN id END), MAX(id)) FROM ChatItem WHERE CaseInvoiceId = 160670;
逻辑说明:优先计算isDone=0的行的最大id,若结果为空(不存在isDone=0的行),则 fallback 到所有行的最大id,也就是isDone=1的最大id。如果需要批量查询多个CaseInvoiceId的对应值,只需要在后面加GROUP BY CaseInvoiceId即可。
内容的提问来源于stack exchange,提问作者tamikoon
相关产品推荐
相关产品推荐

