您的 WHERE 子句是多余的。
Select convert(varchar(8), max(checkdate),1) lastcheckdate
from table
where status = 'processed'
and not status in ('delivered', 'scheduled')
对于搜索到的任何行,如果 status = 'processed',则 status 既不是 'delivered' 也不是 'scheduled'。它们是排他性的。
因此,开始通过减少代码来寻找您的解决方案。
Select convert(varchar(8), max(checkdate),1) lastcheckdate
from table
where status = 'processed'
Select convert(varchar(8), max(checkdate),1) as nextcheckdate
from table
where status = 'scheduled'
现在,查看选择列。请注意,函数逻辑是相同的,只是您对列进行了不同的别名。
让他们保持一致。
Select convert(varchar(8), max(checkdate),1) as next_or_last_check_date
from table
where status = 'processed'
Select convert(varchar(8), max(checkdate),1) as next_or_last_check_date
from table
where status = 'scheduled'
现在唯一的区别是两个状态检查。我们可以将它们组合在一起以进行单个查询或使用 IN(相同的区别)。
Select convert(varchar(8), max(checkdate),1) as next_or_last_check_date
from table
where status = 'processed'
or status = 'scheduled'
使用相同的东西:
Select convert(varchar(8), max(checkdate),1) as next_or_last_check_date
from table
where status IN ( 'processed', 'scheduled' )