Limitar SELECT
08/03/2016
0
Pessoal, SQL não é minha praia, mas preciso muito de uma ajuda com a questão abaixo, são dados de exemplo e especificamente o que eu quero.
Vamos lá:
Na tabela "Venda" tenho os campos
cod_venda,
nome_peca,
cod_peca,
cliente
...
claro que diferentes clientes compraram o mesmo produto, mas eu precisava a partir de uma listagem de cod_peca trazer somente um cod_venda por cod_peca, um único registro para cada cod_peca que pode ser de qualquer cod_venda, isso não importa e é apenas pra ser usado em um outro processo.
Não é viável eu selecionar todos os dados assim
SELECT * FROM venda WHERE cod_peca IN (100, 200, 300, 400, 500)
e depois separar o que eu quero, pq serão milhares de registros e eu vou perder muito tempo.
Alguém, por favor, sabe de alguma claúsula/forma que consiga me ajudar selecionar esses dados?
Se ficou confuso me sinalizem.
Bruno Teles
Posts
08/03/2016
Marcos P
SELECT DISTINCT cod_venda, cod_peca, nome_peca, cliente FROM venda WHERE cod_peca IN (100, 200, 300, 400, 500)
Senão for isso, volte aqui e avise...
09/03/2016
Bruno Teles
Essa cláusula não me ajudou pq o campo COD_VENDA é PRIMARY KEY e aí esse código me trouxe os mesmos resultados. Eu preciso de algo que me retornasse apenas um registro do campo COD_PECA não importando a ordem das outras informações. E partir daí eu iria usar os resultados do campo COD_VENDA em um outro processo.
Valeu pela ajuda.
09/03/2016
Marcos P
SELECT DISTINCT cod_peca FROM venda WHERE cod_peca IN (100, 200, 300, 400, 500)
09/03/2016
Bruno Teles
SELECT cod_venda, cod_peca, nome_peca, cliente FROM venda WHERE cod_peca IN (100, 200, 300, 400, 500);
Mas apenas um registro para cada COD_PECA, pq depois preciso usar o COD_VENDA dos resultados em um outro processo.
09/03/2016
Marcos P
Você afirma que precisa de todos os campos, mas apenas um registro de COD_PECA terá utilidade para selecionar ( posteriormente ) COD_VENDA.
Se é apenas um registro de COD_PECA, para que os demais campos ?
Faz o seguinte... vai no SqlFiddle, cria a estrutura de dados e popula a tabela com alguns registros.
Depois, retorna aqui com o link que te ajudo com a query.
09/03/2016
Bruno Teles
É mais ou menos assim:
Exemplo:
Se eu utilizar isso
SELECT * FROM venda WHERE cod_peca IN (100, 200, 300, 400, 500);
Vai me retornar isso
[img]http://arquivo.devmedia.com.br/forum/imagem/479379-20160309-152446.jpg[/img]
Eu preciso de algo que me retornasse apenas um registro de cada do campo COD_PECA (de acordo com meu WHERE) não importando a ordem das outras informações. E partir daí eu iria usar os resultados do campo COD_VENDA em um outro processo.
Seria resultado como esse
[img]http://arquivo.devmedia.com.br/forum/imagem/479379-20160309-152454%20%281%29.jpg[/img]
09/03/2016
Marcos P
Os registros selecionados na sua "segunda" consulta são os mesmos da "primeira" consulta... exceto pelo fato que nem todos os registros foram listados na segunda.
Confuso, né mesmo ?!?
Vamos tentar de um outro jeito :
select nroordem, categoria, codservico, dataatend from ordserv where categoria in (select distinct categoria from servicos where categoria_ativa = 1)
Essa query retorna os dados (nroordem, categoria, codservico e dataatend) de TODAS as ordens de serviço em que a categoria está ATIVA.
O que resolve isso é...
...categoria in (select distinct categoria from servicos where categoria_ativa = 1)
Que é uma subquery que recupera as categorias ativas ( na tabela categoria ) e faz com que a query principal selecione apenas as ordens de serviço em que a cetegoria esteja no conjunto de dados recuperados pela subquery.
Repare que são duas tabelas diferentes, mas nada impede de aplicar a mesma ideia na mesma tabela.
Consegue adaptar e testar ?
09/03/2016
Marcos P
09/03/2016
Fabiano Carvalho
select * from (select row_number() over(partition by Cod_Peca order by Cod_Peca) as d,* from Venda) as v where d = 1
Essa consulta funciona no SQL Server.
[img]http://arquivo.devmedia.com.br/forum/imagem/332951-20160309-155433.png[/img]
09/03/2016
Marcos P
Lendo com calma seu exemplo, creio que o código abaixo resolve seu problema ( a princípio ) em qualquer SGBDr :
select * from venda where cod_venda in (select min(cod_venda) from venda group by cod_peca) order by Cod_Peca
Testa e avisa...
Ok ?!?
10/03/2016
Bruno Teles
Obrigado Marcos e FaabiianooC.
Clique aqui para fazer login e interagir na Comunidade :)