Jump to content
bruno.teles

Limitar SELECT

Recommended Posts

Boa tarde,


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.


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.


Exemplo:




COD_VENDA NOME_PECA COD_PECA CLIENTE
1 Borracha 100 João Silva
2 Caderno 200 Maria José
3 Lapis 300 José Maria
4 Estojo 400 Lucas Felipe
5 Mochila 500 Bruna Souza
7 Estojo 400 Rosana Silva
8 Caderno 200 Claudio Souza
9 Lapis 300 João Paulo
10 Estojo 400 Guilherme Oliveira
11 Mochila 500 Gustavo Abreu




Alguém, por favor, sabe de alguma cláusula/forma que consiga me ajudar selecionar esses dados?


Se ficou confuso me sinalizem.

Share this post


Link to post
Share on other sites
Boa tarde,
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.
Exemplo:
Se eu utilizar isso
SELECT *
FROM venda
WHERE cod_peca IN (100, 200, 300, 400, 500);

Vai me retornar isso

COD_VENDA    NOME_PECA	   COD_PECA	CLIENTE
1	     Borracha	   100	        João Silva
2            Caderno	   200	        Maria José
3            Lapis	   300	        José Maria
4	     Estojo	   400	        Lucas Felipe
5	     Mochila	   500	        Bruna Souza
7	     Estojo	   400	        Rosana Silva
8            Caderno	   200	        Claudio Souza
9	     Lapis	   300	        João Paulo
10	     Estojo	   400	        Guilherme Oliveira
11	     Mochila	   500	        Gustavo Abreu

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.
Um resultado como esse
COD_VENDA  NOME_PECA    COD_PECA    CLIENTE
1          Borracha     100         João Silva
3          Lapis        300         José Maria
4          Estojo       400         Lucas Felipe
8          Caderno      200         Claudio Souza
11         Mochila      500         Gustavo Abreu

 

Alguém, por favor, sabe de alguma cláusula/forma que consiga me ajudar selecionar esses dados?
Se ficou confuso me sinalizem.

Share this post


Link to post
Share on other sites

Não sei se entendi mas creio que o select do Aduato resolve.

Share this post


Link to post
Share on other sites

pode usar algo assim

 

SELECT *

FROM venda a

WHERE cod_peca IN (select max(cod_peca) from vendas b on b.cod_venda = a.cod_venda );

 

 

Adauto, não deu certo cara, foram os mesmos resultados.

 

RRuYLBH.png

 

Mas agora que eu percebi que meu exemplo estava incompleto, é 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

COD_VENDA NOME_PECA     COD_PECA    CLIENTE
1         Borracha      100         João Silva
2         Caderno       200         Maria José
3         Lapis         300         José Maria
4         Estojo        400         Lucas Felipe
5         Mochila       500         Bruna Souza
7         Estojo        400         Rosana Silva
8         Caderno       200         Claudio Souza
9         Lapis         300         João Paulo
10        Estojo        400         Guilherme Oliveira
11        Mochila       500         Gustavo Abreu
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.
Um resultado como esse
COD_VENDA NOME_PECA    COD_PECA    CLIENTE
1         Borracha     100         João Silva
3         Lapis        300         José Maria
4         Estojo       400         Lucas Felipe
8         Caderno      200         Claudio Souza
11        Mochila      500         Gustavo Abreu

Share this post


Link to post
Share on other sites

talvez fique lento

SELECT  * 
FROM venda a
WHERE cod_venda IN (select max(cod_venda) from vendas b on b.cod_peca = a.cod_peca );

Share this post


Link to post
Share on other sites

Entendi, então seu max tem que ser no cliente e não na peça essa tabela venda tem chave da tabela cliente ?

 

se tiver ficaria codigo_cliente in(select max(cod_cliente) from cliente b where a.codigo_cliente = b.codigo_cliente)

Share this post


Link to post
Share on other sites

 

talvez fique lento

SELECT  * 
FROM venda a
WHERE cod_venda IN (select max(cod_venda) from vendas b on b.cod_peca = a.cod_peca );

 

 

Entendi, então seu max tem que ser no cliente e não na peça essa tabela venda tem chave da tabela cliente ?

 

se tiver ficaria codigo_cliente in(select max(cod_cliente) from cliente b where a.codigo_cliente = b.codigo_cliente)

 

 

É isso mesmo pessoal, me pouparam muito tempo, consegui chegar ao meu resultado com esses códigos e esse outro aqui tb.

select *
from venda
where cod_venda in (select max(cod_venda)
                    from venda
                    group by cod_peca)
order by Cod_Peca 

Valeu Motta e Adauto!

Share this post


Link to post
Share on other sites
Problema já resolvido com qualquer dos códigos abaixo.



select *
from venda
where cod_venda in (select max(cod_venda)
from venda
group by cod_peca)
order by Cod_Peca




SELECT *
FROM venda a
WHERE cod_venda IN (select max(cod_venda) from vendas b on b.cod_peca = a.cod_peca );

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By whoopic
      Olá a todos!
      Estou a tentar perceber qual a melhor abordagem para:
      (Campos/Colunas:)
      A - Moeda
      B - Igual a A
      C - (A+B)/2
      D - Caixa de seleção7Checkbox : Se "ligada": C=C/2
       
      Preciso que estes campos sejam "persistentes", para que os possa usar em relatórios.
       
      Pensei em colunas "computadas". Consigo realizar tudo isto com essa abordagem?
      Tentei por exemplo no campo B, usando o campo de fórmula para coluna computada e inserindo o nome da coluna A.
       
       
      Pode alguém dar-me um empurrãozinho?
      Obrigado desde já.
       
    • By TheRonaldoStar
      Olá, Venho aqui de novo para tirar uma dúvida que creio eu ser muito simples porem não sei como aplicar!;
      Como diz no título do post eu gostaria de fazer um select de cadastros cujo o id do usuário online está nesta coluna,
      Porem neste campo contem 2 id separados por uma ' , '. Sendo assim não dar para mim fazer uma pesquisa com com a tag WHERE id ='Valor'
      Em fim eu quero ajuda para selecionar todos os cadastro cujo o id do usuário online está por EX: Sou o usuário 1 existe dois cadastros que tem meu id: [1, 2] e [2, 1];
      Alem de pesquisar todos os cadastros que tenha meu id nesta coluna eu quero que não tenha interferência ou listar cadastro do usuário 1 se eu for o usuário 21 por ex.
       
      Qual quer ajuda é bem vinda!
      Atenciosamente,
      ~Ronaldo
    • By TheRonaldoStar
      Oii, fala ae pessoal!!
      Alguém pode me ajudar com uma coisa por favor?;
      Seguinte!, eu anteriormente fiz uma pergunta aqui no fórum recorrente a isso, mas eu conseguir uma solução parcial.
      Que era, fazer uma listagem de todos os cadastros e fazer a junção dos cadastros com uma coluna igual, Ou seja existem duas colunas [DE e Para], que recebem o id de quem está recebendo ou que está enviando a mensagem, eu conseguir fazer a tal listagem por grupo mas o problema que estou tendo é: que so faz o agrupamento de as colunas contiver o id por ex: [De = "1" e Para ="2"].
      Atualmente estou usando a codificação deste Jeito:
       
      $sql_2 = $db -> prepare("SELECT * FROM privado WHERE (Para = '$Meu_id') Or (De = '$Meu_id') GROUP BY Para, De DESC"); $sql_2 -> execute(); Esta consulta como pode ver ele busca todos os cadastros que tenha o meu ID ou seja do usuário online!, Após a consulta ele vei obter em um "while" somente o [ Id_De eo Id_Para ] desta forma:
      while($dados_2 = $sql_2 -> fetch(PDO::FETCH_OBJ)){ $Id_De = ($dados_2 -> De); $Id_Para = ($dados_2 -> Para); } Mas em fim eu gostaria de saber como mostrar somente um resultado ou seja o ultimo resultado que tiver o meu ID em ambas colunas [ Id_De ou Id_Para ].
      Antes de vocês me recomendar a função DESC LIMIT 'valor' saiba eu quero que liste todos os usuários que enviou ou recebeu minha mensagem não somente 1 ou seja se eu mandar um mensagem para o usuário 2 e ele me retornar uma mensagem vai mostrar somente o ultimo registro que tenha o meu ID e o id dele.
       
      Atenciosamente,
      ~Ronaldo
       
    • By Aureo Almeida
      Eu possuo em uma página em que existe um menu, com categorias inseridas a partir de um banco de dados, e na mesma página uma listagem de produtos.
      A função deste menu é enviar para a clausula where do SQL que lista os produtos parâmetros que permitam filtro dos produtos. Faço isso com a variável $_GET, da seguinte forma:
      $sub_id = $_GET['sct_id']; Isso funciona certinho, porém o problema é que quando a página é carregada, a não ser que seja feita uma opção no menu para selecionar os produtos, a listagem deles volta vazia e com o seguinte erro:
      array(0) { } Notice: Undefined index: sct_id in D:\XAMPP\htdocs\projeto\arq\cosm.php on line 76 Tentei desenvolver as seguinte condições que mudassem o SQL,  mas não consegui fazer dar certo:
      if(empty($sub_id = array(0))) $sql = "SELECT * FROM psd_produtos WHERE ctg_id = 1"; else { $sql = "SELECT * FROM psd_produtos WHERE ctg_id = 1 AND sct_id = '$sub_id'"; } Como fazer com que o SQL que orienta a consulta quando a página for carregada seja um, e quando passo parâmetro via GET seja outro?
    • By thunanchiu@hotmail,com
      Bom dia, gostaria dessa ajuda.
      Tenho uma tabela de "INSCRIÇÃO" onde a mesma possui 2 chaves estrangeiras (CAND_SQ e CANDPL_SQ). Ambas as chaves estrangeiras possuem um campo CPF.
      Gostaria de saber como eu trago os cpfs que são iguais dentro da inscrição.
      Ou seja, atualmente tenho uma INSCRIÇÃO onde pode ser feita de duas maneiras diferentes. Inscrição Regular e Inscrição Atraso. Quando eu for fazer a Inscrição Atraso, caso eu já tenha feito a Inscrição Regular não poderei fazer a Inscrição Atraso.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.