Mejorar Query

70 views
Skip to first unread message

Daniel Burgos

unread,
Apr 24, 2021, 2:56:54 PM4/24/21
to Comunidad de Visual Foxpro en Español
Buena tardes grupo. Tengo un requerimiento de un cliente que desea ver la cantidad de días adeudados en sus cuentas corrientes, a vencer (menores e igual a 30 días) y vencidas (mayores a 30 días).
Lo resolví con un UNION (que dejo el ejemplo) el cual me da la información de cada cliente en 2 registros, a vencer en uno y vencidos en otro (imagenes1.jpg). A posteriori el SCAN para unir ambos valores en un solo registro. Mi pregunta es la siguiente:
Se puede mejorar esa Query para evitar hacer ese SCAN y dejar el resultado final como la imagen2.jpg?

Muchas gracias por su tiempo y sabiduría

Atentamente
Daniel Burgos
Mar del Plata, Argentina

Create Cursor movi (fclie Int, fnombre c(30), ffecha d, ftipo Int)
Insert Into movi Values (1,"Cliente 1", {^2021-01-05}, 1)
Insert Into movi Values (1,"Cliente 1", {^2021-04-15}, 1)
Insert Into movi Values (1,"Cliente 1", {^2020-04-20}, 2)
Insert Into movi Values (2,"Cliente 2", {^2021-01-10}, 1)
Insert Into movi Values (3,"Cliente 3", {^2021-04-09}, 1)
Insert Into movi Values (4,"Cliente 4", {^2021-02-01}, 1)
Insert Into movi Values (5,"Cliente 5", {^2021-04-06}, 1)
Insert Into movi Values (6,"Cliente 6", {^2020-06-02}, 1)
Insert Into movi Values (6,"Cliente 6", {^2021-04-01}, 1)

Select fclie, fnombre, 00000 As venc, Max(Date()-ffecha) As novenc ;
From movi ;
Where Date()-ffecha <= 30 And ftipo=1 ;
Group By 1,2 ;
Union ;
Select fclie, fnombre, Max(Date()-ffecha) As venc, 00000 As novenc ;
From movi ;
Where Date()-ffecha > 30 And ftipo=1 ;
Group By 1,2 ;
Order By 2 ;
Into Cursor tempo Readwrite

Brows
*!*  Comienzo reubicación de duplicados
lnClie=0
Scan
If fclie = lnClie
lnd1 = novenc
lnd2 = venc
Skip -1
Replace novenc With novenc + lnd1, venc With venc + lnd2
Skip
Delete Next 1
Else
lnClie = fclie
Endif
Endscan

Browse
Use In tempo
Use In movi
imagen1.jpg
imagen2.jpg

Víctor Hugo Espínola Domínguez

unread,
Apr 24, 2021, 5:34:13 PM4/24/21
to publice...@googlegroups.com
Text to lcSelNoVenc TEXTMERGE NOSHOW FLAGS 1 PRETEXT 15

Select fClie
         , fNombre
         , Max(Date()-fFecha) As NoVenc
From Movi
Where Date() - fFecha <= 30 And fTipo = 1
Group By 1, 2

endtext


Text to lcSelVenc TEXTMERGE NOSHOW FLAGS 1 PRETEXT 15

Select fClie
         , fNombre
         , Max(Date()-fFecha) As Venc
From Movi
Where Date() - fFecha > 30 And fTipo = 1
Group By 1,2
endtext

Text to lcSelAmbos TEXTMERGE NOSHOW FLAGS 1 PRETEXT 15

Select Distinct
           mo.fClie
         , mo.fNombre
         , Nvl(sv.Venc, 0)
         , Nvl(nv.NoVenc, 0)
From Movi As mo
Left Join (<<lcSelNoVenc>>) As nv
    On mo.fClie = nv.fClie
Left Join (<<lcSelVenc>>) As sv
    On mo.fClie = sv.fClie
Order By 2
Into Cursor Tempo

EndText

ExecScript(lcSelAmbos)

Browse

Use In Tempo
Use In Movi

Saludos,
Víctor.
Lambaré - Paraguay.



--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/bca2b0ab-101a-4c33-af13-c419ea124eb7n%40googlegroups.com.

Daniel Burgos

unread,
Apr 24, 2021, 9:03:07 PM4/24/21
to Comunidad de Visual Foxpro en Español
Buenas noches grupo...
Muchas gracias Victor... esa era la idea, quedó perfecta la query

Atentamente
Daniel Burgos
Mar del Plata, Argentina

Reply all
Reply to author
Forward
0 new messages