Ваши предложения WHERE являются излишними.
Select convert(varchar(8), max(checkdate),1) lastcheckdate
from table
where status = 'processed'
and not status in ('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')
Можете ли вы сказать нам, что первичный ключ для таблицы пожалуйста ? –
Первичным ключом будет код компании. 4-значный код, присвоенный каждой компании в db. – BSanders
Не будет ли 'nextcheckdate'' MIN 'проверок с« запланированным »статусом? просто пытаясь понять контекст здесь ... – Beno