Desejo retornar os 10 principais registros de cada seção em uma consulta. Alguém pode ajudar com como fazê-lo? Seção é uma das colunas da tabela.
O banco de dados é o SQL Server 2005. Desejo retornar os 10 primeiros por data digitada. As seções são comerciais, locais e de recursos. Para uma data em particular, quero apenas as 10 (dez) linhas de negócios mais recentes (entrada mais recente), as 10 (dez) linhas locais e os 10 principais recursos.
Respostas:
Se você estiver usando o SQL 2005, poderá fazer algo assim ...
Se o seu RankCriteria tiver vínculos, você poderá retornar mais de 10 linhas e a solução de Matt poderá ser melhor para você.
fonte
DENSE_RANK
que não tem lacunas na numeração. 1No T-SQL, eu faria:
fonte
ROW_NUMBER
função. Por exemplo, eu usei esta solução no SQLite.Isso funciona no SQL Server 2005 (editado para refletir seu esclarecimento):
fonte
fonte
r
. fixo.Eu faço assim:
update: Este exemplo de GROUP BY funciona apenas no MySQL e SQLite, porque esses bancos de dados são mais permissivos que o SQL padrão em relação ao GROUP BY. A maioria das implementações SQL exige que todas as colunas na lista de seleção que não fazem parte de uma expressão agregada também estejam no GROUP BY.
fonte
Se usarmos o SQL Server> = 2005, poderemos resolver a tarefa com apenas uma seleção :
fonte
top 1
funciona com acase
instrução naorder by
cláusula retornando 0 ou 1?Se você souber quais são as seções, poderá fazer:
fonte
Eu sei que este tópico é um pouco antigo, mas acabei de me deparar com um problema semelhante (selecione o artigo mais recente de cada categoria) e esta é a solução que me veio à cabeça:
Isso é muito semelhante à solução de Darrel, mas supera o problema de RANK que pode retornar mais linhas do que o pretendido.
fonte
JOIN
vez deLEFT JOIN
, pois nunca haverá um registroTopCategoryArticles
sem umArticle
registro correspondente .Tentei o seguinte e funcionou com laços também.
fonte
Se você deseja produzir uma saída agrupada por seção, exibindo apenas os n registros superiores de cada seção, algo como isto:
... o seguinte deve funcionar de maneira bastante genérica com todos os bancos de dados SQL. Se você deseja o top 10, basta alterar 2 para 10 no final da consulta.
Para configurar:
fonte
O operador UNION pode trabalhar para você? Faça um SELECT para cada seção e depois UNIQUE-os juntos. Acho que funcionaria apenas para um número fixo de seções.
fonte
Q) Localizando registros TOP X de cada grupo (Oracle)
6 linhas selecionadas.
fonte
Enquanto a pergunta era sobre o SQL Server 2005, a maioria das pessoas seguiu em frente e, se a encontrar, a resposta preferida em outras situações é aquela que é usada
CROSS APPLY
conforme ilustrado nesta postagem do blog .Esta consulta envolve 2 tabelas. A consulta do OP envolve apenas 1 tabela, no caso em que uma solução baseada em função de janela pode ser mais eficiente.
fonte
Você pode tentar esta abordagem. Esta consulta retorna 10 cidades mais populosas de cada país.
fonte