50 лучших записей по DATALENGTH поля в SQL Server - PullRequest
0 голосов
/ 08 сентября 2018

Azure SQL Server 2016 - у меня проблемы с синтаксисом для объединения TOP, MAX и DATALENGTH, чтобы получить список 50 лучших записей из таблицы по DATALENGTH определенного поля.

Поле, которое мне нужно сделать для DATALENGTH, называется Text. Я не на самом деле хочу, чтобы поле Text было возвращено в результатах. То, что я хочу получить, - это поля с именами CaptureId и TaskSourceId из 50 записей с наибольшим значением DATALENGTH в Text поле, а также сумма DATALENGTH.

Я попробовал это, но это не сработало, с ошибкой, связанной с тем, что CaptureId не содержится в статистической функции или предложении GROUP BY.

SELECT TOP 50 
    CaptureId, 
    TaskSourceId, 
    MAX(DATALENGTH([Text]))
FROM 
    Data.Capture

Может кто-нибудь помочь мне исправить этот запрос?

1 Ответ

0 голосов
/ 08 сентября 2018

Вам не нужно max. Просто отсортируйте записи:

select top 50 
  captureid, tasksourceid, datalength(text) as text_len
from data.capture
order by datalength(text) desc

Это не заботится о связях и возвращает до 50 строк.

Если вы хотите учесть связи по длине данных текстового поля, используйте top 50 with ties вместо простого top 50. В этом случае может быть возвращено более 50 записей.

...