Все три способа, которые вы можете использовать для символа новой строки:
'\n'
"\n"
"""\n"""
Я думаю, это потому, что вы не указали псевдоним для своего подзапроса. Вы также пропускаете группировку во внешнем запросе. Форматирование вашего запроса также может быть улучшено:
select
count(a.did),
a.did
from (
select
count(dh.FileDataId) as fid,
dh.documentid as did,
dh.FileDataId
from DocumentHistory dh
INNER JOIN Document d on d.documentid = dh.documentid
where d.DocumentTypeId=11 and d.IsVerified=0 and d.lastmodified < '2019-01-05'
group by DocumentId, filedataid
having count(FileDataId)<2
) a
GROUP BY did
Помимо включения предложения Саймона относительно формата даты (гггг-мм-дд - это ISO, и не подвержено проблемам локализации, таким как дата, содержащая слова - ваш запрос может не работать, например, с испанской базой данных), я также поменял IN на INNER JOIN; хотя оптимизаторы запросов, как правило, могут переписывать IN так, чтобы он вел себя как объединение, следует стремиться избегать использования IN для списков, которые длиннее, чем вы были бы готовы писать вручную. Некоторые базы данных лучше оптимизированы для объединения, чем в
. Заметим, что существует небольшая разница в поведении между INNER JOIN и IN, если в списке IN (...) есть дубликаты, которых вы не будете получить повторяющиеся строки из результата истории документа, но вы бы с внутренним объединением. (Я ожидаю, что documentmentid является первичным ключом документа, поэтому дубликаты в этом случае не появятся)