SQL - Selecionar Range a partir de um ID
Preciso de um select que me retorne os X registros depois do registro de ID = Y, respeitando o order by NOME.
Exemplificando.
Objetivo: Quero 5 registros depois do ID 54;
Resultado:
74 - Antonio Figueredo Lemos
76 - Cristiane Santos Silva
59 - Eliane Martins Ribeiro
58 - Elson Alves Pereira
64 - Fagna Feliciano da Silva
Alguém me ajuda?
Image de exemplo: https://i.stack.imgur.com/S5H6t.png
Exemplificando.
Objetivo: Quero 5 registros depois do ID 54;
Resultado:
74 - Antonio Figueredo Lemos
76 - Cristiane Santos Silva
59 - Eliane Martins Ribeiro
58 - Elson Alves Pereira
64 - Fagna Feliciano da Silva
Alguém me ajuda?
Image de exemplo: https://i.stack.imgur.com/S5H6t.png
Joao
Curtidas 0
Melhor post
Emerson Nascimento
18/02/2020
pode ser assim, se você sabe a partir de qual linha deseja apresentar os registros:
ou assim, se você não sabe o número da linha e tem somente o ID:
SELECT FIRST 3 -- AQUI VOCÊ INDICA QUANTOS REGISTROS QUER APRESENTAR TAB.ID, TAB.NOME FROM ( SELECT (SELECT COUNT(T2.NOME) FROM TABELA T2 WHERE T2.NOME <= T.NOME) LINHA, T.ID, T.NOME FROM TABELA T ORDER BY T.NOME ) TAB WHERE TAB.LINHA >= 3 -- AQUI VOCÊ INDICA A PARTIR DE QUAL LINHA QUER APRESENTAR
ou assim, se você não sabe o número da linha e tem somente o ID:
SELECT FIRST 3 -- AQUI VOCÊ INDICA QUANTOS REGISTROS QUER APRESENTAR TAB.ID, TAB.NOME FROM ( SELECT (SELECT COUNT(T2.NOME) FROM TABELA T2 WHERE T2.NOME <= T.NOME) LINHA, T.ID, T.NOME FROM TABELA T ORDER BY T.NOME ) TAB WHERE TAB.LINHA >= (SELECT T3.LINHA FROM ( SELECT (SELECT COUNT(T2.NOME) FROM TABELA T2 WHERE T2.NOME <= T.NOME) LINHA, T.ID, T.NOME FROM TABELA T ORDER BY T.NOME ) T3 WHERE T3.ID = 76) -- AQUI VOCÊ INDICA O ID QUE QUER USAR COMO FILTRO
GOSTEI 2
Mais Respostas
Emerson Nascimento
17/02/2020
Firebird
SQL Server
SELECT FIRST 5 * FROM TABELA WHERE ID > 54 ORDER BY NOME
SQL Server
SELECT TOP 5 * FROM TABELA WHERE ID > 54 ORDER BY NOME
GOSTEI 0
Joao
17/02/2020
Firebird
SQL Server
SELECT FIRST 5 * FROM TABELA WHERE ID > 54 ORDER BY NOME
SQL Server
SELECT TOP 5 * FROM TABELA WHERE ID > 54 ORDER BY NOME
Agradeço pela resposta Emerson, porém esse select não funciona. No caso desse resultado aqui:
74 - Antonio Figueredo Lemos
76 - Cristiane Santos Silva
59 - Eliane Martins Ribeiro
58 - Elson Alves Pereira
64 - Fagna Feliciano da Silva
O select só ia pegar os IDs menores que 54, ou seja ia eliminar todos os registros acima.
GOSTEI 0
Emerson Nascimento
17/02/2020
você testou?
porque a condição diz pra pegar os registros cujo ID seja MAIOR que 54, então não entendi quando você diz que
porque a condição diz pra pegar os registros cujo ID seja MAIOR que 54, então não entendi quando você diz que
O select só ia pegar os IDs menores que 54, ou seja ia eliminar todos os registros acima
GOSTEI 0
Joao
17/02/2020
você testou?
porque a condição diz pra pegar os registros cujo ID seja MAIOR que 54, então não entendi quando você diz que
porque a condição diz pra pegar os registros cujo ID seja MAIOR que 54, então não entendi quando você diz que
O select só ia pegar os IDs menores que 54, ou seja ia eliminar todos os registros acima
Ah, perfeito, saquei! Porém mesmo assim ainda não dá, porque pode ter um registro que tenha o ID menor que 54 mas que faça parte do resultado por estar em ordem alfabética, logo será eliminado :/
Por exemplo:
Essa é a ordenação por NOME
76 - Cristiane Santos Silva
59 - Eliane Martins Ribeiro
58 - Elson Alves Pereira
64 - Fagna Feliciano da Silva
Caso eu queira os 3 registros depois do ID 76, o resultado seria esse:
59 - Eliane Martins Ribeiro
58 - Elson Alves Pereira
64 - Fagna Feliciano da Silva
Porém com seu código ele eliminaria todos esses, pois todos os ID são menores que 76.
GOSTEI 0
Emerson Nascimento
17/02/2020
Ah... Agora entendi tua necessidade. Peraí que vou pensar em algo.
GOSTEI 0
Emerson Nascimento
17/02/2020
no lugar de
você pode colocar
(SELECT COUNT(T2.NOME) FROM TABELA T2 WHERE T2.NOME <= T.NOME) LINHA,
você pode colocar
ROW_NUMBER() OVER (ORDER BY T.NOME) LINHA,
GOSTEI 0
Joao
17/02/2020
no lugar de
você pode colocar
(SELECT COUNT(T2.NOME) FROM TABELA T2 WHERE T2.NOME <= T.NOME) LINHA,
você pode colocar
ROW_NUMBER() OVER (ORDER BY T.NOME) LINHA,
Agora deu certo, muito obrigado amigo :D
GOSTEI 0