Я хочу вернуть 10 лучших записей из каждого раздела в одном запросе. Может кто-нибудь помочь с тем, как это сделать? Раздел является одним из столбцов в таблице.
База данных - SQL Server 2005. Я хочу вернуть первые 10 по введенной дате. Разделы бизнес, локальные и тематические. Для одной конкретной даты мне нужны только верхние (10) бизнес-строк (самая последняя запись), верхние (10) локальных строк и верхние (10) объектов.
Ответы:
Если вы используете SQL 2005, вы можете сделать что-то вроде этого ...
Если у вашего RankCriteria есть связи, вы можете вернуть более 10 строк, и решение Мэтта может быть лучше для вас.
источник
DENSE_RANK
без пробелов в нумерации. +1В T-SQL я бы сделал:
источник
ROW_NUMBER
функцию. Например, я использовал это решение в SQLite.Это работает на SQL Server 2005 (отредактировано, чтобы отразить ваше пояснение):
источник
источник
r
. фиксированный.Я делаю это так:
обновление: этот пример GROUP BY работает только в MySQL и SQLite, потому что эти базы данных более универсальны, чем стандартный SQL в отношении GROUP BY. Большинство реализаций SQL требуют, чтобы все столбцы в списке выбора, которые не являются частью агрегатного выражения, также находились в GROUP BY.
источник
Если мы используем SQL Server> = 2005, то мы можем решить задачу только одним выбором :
источник
top 1
работает сcase
оператором вorder by
предложении, возвращающем 0 или 1?Если вы знаете, что такое разделы, вы можете сделать:
источник
Я знаю, что этот поток немного староват, но я только что столкнулся с подобной проблемой (выберите самую новую статью из каждой категории), и вот решение, которое я придумал:
Это очень похоже на решение Darrel, но преодолевает проблему RANK, которая может вернуть больше строк, чем предполагалось.
источник
JOIN
вместо вместо innerLEFT JOIN
, так как никогда не будет записиTopCategoryArticles
без соответствующейArticle
записи.Перепробовал следующее и с галстуками тоже работал.
источник
Если вы хотите произвести вывод, сгруппированный по разделам, отображая только верхние n записей из каждого раздела примерно так:
... тогда следующее должно работать довольно широко со всеми базами данных SQL. Если вы хотите 10 лучших, просто измените 2 на 10 в конце запроса.
Установить:
источник
Может ли оператор UNION работать на вас? Сделайте один SELECT для каждого раздела, затем объедините их вместе. Думаю, это будет работать только для фиксированного числа разделов.
источник
Q) Поиск TOP X записей из каждой группы (Oracle)
6 строк выбрано.
источник
Хотя вопрос был о SQL Server 2005, большинство людей пошли дальше, и если они найдут этот вопрос, то в других ситуациях предпочтительным ответом может стать тот, который будет использован,
CROSS APPLY
как показано в этом сообщении в блоге .Этот запрос включает в себя 2 таблицы. Запрос OP включает только 1 таблицу, в случае которой решение на основе оконной функции может быть более эффективным.
источник
Вы можете попробовать этот подход. Этот запрос возвращает 10 самых населенных городов для каждой страны.
источник