Clipper On Line • Ver Tópico - Select dentro de outro Select

Select dentro de outro Select

Discussão sobre SQL

Moderador: Moderadores

 

Select dentro de outro Select

Mensagempor janio » 06 Mai 2017 21:55

Pessoal,

A consulta abaixo me retornam TODOS os produtos comprados de um determinado fornecedor:

SELECT a.codigo, a.descri
FROM a03prd a
INNER JOIN a04dnf b ON ( a.codigo=b.codprd )
WHERE b.CodFrn=50
GROUP BY a.codigo
ORDER BY a.descri


Retorna algo como:

20701 ABS LIVRE ATIVA CLASSIC CA 8 UN
6987 ACHOC ITALAC 200ML
15145 ACHOC ITALAC SC 400G
16462 ACHOC PO MAGICO 200G
...


Com este resultado, agora preciso pegar a ULTIMA COMPRA DE CADA PRODUTO! Como faço?

Janio

PS: tabela de compras a04dnf, campo data datent
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1510
Data de registro: 06 Jul 2004 08:43
Cidade/Estado: UBAJARA - CE
Curtiu: 6 vezes
Mens.Curtidas: 29 vezes

Select dentro de outro Select

Mensagempor JoséQuintas » 07 Mai 2017 01:46

José M. C. Quintas
Harbour 3.4, mingw,gtwvg, dbfcdx, ADO+MySql, hbnetio, PNotepad, (msvc2010)
"The world is full of kings and queens, who blind your eyes and steal your dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 7482
Data de registro: 26 Fev 2007 12:59
Cidade/Estado: São Paulo-SP
Curtiu: 4 vezes
Mens.Curtidas: 428 vezes

Select dentro de outro Select

Mensagempor janio » 07 Mai 2017 10:56

Quase dando certo...

Com MAX() ele me retorna a ultima data... blz.

Mas os outros dados do SELECT (qtdprd, vlruni, numnot) não são referentes a ultima data. Estranho viu

select b.codigo, b.descri, a.qtdprd, a.vlruni, a.numnot, Max(a.datent)
from a04dnf a
inner join a03prd b on (a.codprd=b.CODIGO)
where a.codfrn=3
group by a.codprd
order by b.descri
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1510
Data de registro: 06 Jul 2004 08:43
Cidade/Estado: UBAJARA - CE
Curtiu: 6 vezes
Mens.Curtidas: 29 vezes

Select dentro de outro Select

Mensagempor JoséQuintas » 07 Mai 2017 12:38

Normal: o Max() faz retornar a última data, apenas para o campo da data.
Essa vai ser a referência para o outro select.
Lembrando que pode ter mais de uma compra nessa data.
Se for a última, e tiver sequencial de lançamento, talvez seja mais interessante o último lançamento, ou talvez somar os lançamentos dessa última data.

Lembrando que nessa parte ainda sou principiante.
Ainda estou na migração parcial, e por isso esses selects ainda não fazem parte do meu dia-a-dia.
Quem está acostumado provavelmente poderá ter uma solução melhor.
José M. C. Quintas
Harbour 3.4, mingw,gtwvg, dbfcdx, ADO+MySql, hbnetio, PNotepad, (msvc2010)
"The world is full of kings and queens, who blind your eyes and steal your dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 7482
Data de registro: 26 Fev 2007 12:59
Cidade/Estado: São Paulo-SP
Curtiu: 4 vezes
Mens.Curtidas: 428 vezes

Select dentro de outro Select

Mensagempor janio » 08 Mai 2017 10:25

AlxSts, please!

:-o

Tentei tudo ja :(Neg
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1510
Data de registro: 06 Jul 2004 08:43
Cidade/Estado: UBAJARA - CE
Curtiu: 6 vezes
Mens.Curtidas: 29 vezes

Select dentro de outro Select

Mensagempor janio » 09 Mai 2017 01:06

Os dados vieram corretos no codigo abaixo, porem, nao sei se eh a forma mais recomendavel... ate pq achei um pouco lento.

select a.codprd, a.qtdprd, a.vlruni, a.datent
from a04dnf a
inner join (select max(datent) as data from a04dnf b group by b.codprd) c on c.data = a.datent
where a.codfrn=3
group by a.codprd
order by a.codprd
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1510
Data de registro: 06 Jul 2004 08:43
Cidade/Estado: UBAJARA - CE
Curtiu: 6 vezes
Mens.Curtidas: 29 vezes

Select dentro de outro Select

Mensagempor janio » 09 Mai 2017 21:23

Para conseguir o resultado que eu queria, tive que usar a boa e velha GAMBIARRA!

Ficou muito bom. Rapido. Uma bala

- Listo todos os produtos comprados do fornecedor no periodo
- Organizo com data DECRESCENTE
- Descarto os outros resultado de compras q nao seja a ultima, pegando apenas o primeiro resultado de cada produto

         cQuery = "SELECT a.codprd, a.uniprd, a.unicom, a.qtdprd, a.vlruni, a.numnot, a.datent, b.descri, b.sldstk " + ;
                  "FROM a04dnf a " + ;
                  "INNER JOIN a03prd b ON ( a.codprd=b.codigo ) " + ;
                  "WHERE a.is_deleted = 'N' and a.CodFrn='&nCodFrn' and a.datent between '&vDataI_' and '&vDataF_' " + ;
                  "ORDER BY b.descri, a.datent DESC "

         GERA_TAB()
         use &dbftmp as cQuery NEW SCROLLABLE
         DbGoTop()
      
         Do While !Eof()
         
            nCodPrd := CodPrd
            nConta  := 0
            
            Do While nCodPrd = CodPrd
                           
               If nConta = 0                           
                  @ PROW() + 01,000 SAY StrZero(CodPrd,5) + " " + Left(DesCri,40)
                  @ PROW()     ,048 SAY UniCom
                  @ PROW()     ,051 SAY UniPrd   
                  @ PROW()     ,056 SAY DatEnt
                  @ PROW()     ,069 SAY QtdPrd Pict "@E 99,999.99"
                  @ PROW()     ,083 SAY VlrUni Pict "@E 99,999.99"
                  @ PROW()     ,096 SAY NumNot               
                  @ PROW()     ,123 SAY SldStk Pict "@E 99,999.99"
                  @ PROW() + 01,000 SAY REPLICATE("-",132)
               Endif
               
               nConta++
   
               DbSkip()
               
            Enddo
            
         Enddo

         Use
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1510
Data de registro: 06 Jul 2004 08:43
Cidade/Estado: UBAJARA - CE
Curtiu: 6 vezes
Mens.Curtidas: 29 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Faça uma doação para o forum
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro