SQL-запрос на количество запросов

Все три способа, которые вы можете использовать для символа новой строки:

'\n'

"\n"

"""\n"""
0
задан Sami 16 January 2019 в 22:18
поделиться

1 ответ

Я думаю, это потому, что вы не указали псевдоним для своего подзапроса. Вы также пропускаете группировку во внешнем запросе. Форматирование вашего запроса также может быть улучшено:

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 является первичным ключом документа, поэтому дубликаты в этом случае не появятся)

0
ответ дан Caius Jard 16 January 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: