Off topic SQL sever hallar la factura de mayor valor por Cliente

339 views
Skip to first unread message

Felipe Araoz Ramos

unread,
Jun 21, 2017, 9:33:28 AM6/21/17
to Foro-VFP
Buen día amigos 

Uso sql server y quiero mostrar solo la factura de mayor valor de cada cliente, si hago un max al campo valor y un group by me muestra el mayor de cada documento y el clienye tiene varios documentos, si quito el número de documento de la agrupación pierdo el numero del documento.
Espero su ayuda 
Gracias

Ariel Octavio D'Alfeo

unread,
Jun 21, 2017, 9:40:10 AM6/21/17
to publice...@googlegroups.com
Le tendrías que hacer un Max(numero_documento) y sacarlo del group by.
Igual te recomiendo que pases la consulta asi nos podemos dar mas idea de lo que necesitas
--

Ariel Octavio D'Alfeo
Córdoba, Argentina

Carlos Miguel FARIAS

unread,
Jun 21, 2017, 12:28:23 PM6/21/17
to Grupo Fox
SELECT idCliente, nFactura, nMonto FROM Facturas AS F;
   WHERE nMonto = (SELECT MAX(nMonto) FROM Facturas as Q;
                      WHERE F.idCliente = Q.idCliente)

Probando...
Si para un cliente su monto máximo por factura es 1000 y tiene 2 o más facturas de 1000, lista todas.
Saludos: Miguel, La Pampa (RA)
Larga Vida y Prosperidad
Que la Fuerza los acompañe, facturar en negro es estar del lado oscuro de la Fuerza

Felipe Araoz Ramos

unread,
Jun 21, 2017, 2:04:56 PM6/21/17
to Foro-VFP
Gracias Carlos Miguel

Probaré y comento

Saludos

Rene Ricardo

unread,
Jun 21, 2017, 2:48:16 PM6/21/17
to Grupo Visual Fox
Haz lo siguiente:
SELECT TOP 1

      idCliente,
     nFactura,
     nMonto
FROM Facturas
ORDER BY nMonto DESC

Rene Ricardo

unread,
Jun 21, 2017, 3:17:08 PM6/21/17
to Grupo Visual Fox
Haz lo siguiente:
SELECT TOP 1
      idCliente,
     nFactura,
     nMonto
FROM Facturas
WHERE idCliente = lcCliente
ORDER BY nMonto DESC
--
Tel. 2510-8619 

Víctor Hugo Espínola Domínguez

unread,
Jun 21, 2017, 3:20:04 PM6/21/17
to publice...@googlegroups.com
Tampoco, sigue participando.

Saludos,
Víctor.
Lambaré - Paraguay.

Martin Paredes

unread,
Jun 21, 2017, 6:13:18 PM6/21/17
to Comunidad de Visual Foxpro en Español
entro a la catafixia con chabelo, este query funciona en PostgreSQL....

prueba asi.....

select DISTINCT ON (nombres) remision.nofactura, remision.fecha, clientes.nombres, remision.imptotal
   FROM mapasoft.remision, mapasoft.clientes
              WHERE remision.nocliente=clientes.nocliente AND remision.imptotal>0 AND remision.estatus='N' ORDER BY nombres, imptotal desc;

Slds...
Mapasac

Elkin Fernando Ortiz

unread,
Jun 21, 2017, 6:16:39 PM6/21/17
to publice...@googlegroups.com

Debes utilizar el having

Felipe Araoz Ramos

unread,
Jun 21, 2017, 9:10:06 PM6/21/17
to Foro-VFP
Gracias a todos, llego a casa y pruebo y comento como me fue

Felipe Araoz Ramos

unread,
Jun 22, 2017, 10:56:58 PM6/22/17
to Foro-VFP
Buenas noches 

Dicsculpen la demora en hacer la prueba pero con select top 1, no me funcionó porque me muestra un solo registro con select distinct igual, pues cada documento es distinto y no ubico el mayor,  las solucion de miguel se aproxima, pero dijo el mismo cuando hay mas de dos montos iguales se repite.
Estoy intentando ahora con rrecorrer la tabla con un  cursor o al estilo fox en un bloque while y llenado una tabla temporal ubicando ahi todos los registro que sean mayores.  

Gracias



Felipe Araoz Ramos
RPM #941990605 / 941990605
Lima-Perù 

Carlos Miguel FARIAS

unread,
Jun 23, 2017, 7:26:51 AM6/23/17
to Grupo Fox
Estimado:
La solución que te mande si la direccionas a un cursor, te daría los datos que dices necesitar.
Si tienes dos o más facturas de un cliente que tienen el monto más alto para dicho cliente, no puedes encontrar solo una factura con el monto más grande, porque tienes dos o más (no puedes ser monógamo si te casaste dos veces). Lo que puedes agregar a tu consulta es que las facturas recuperadas queden ordenadas por fecha de factura, entonces, la factura más vieja sería la de monto mayor (por ajuste por inflación). Salvo que vivas en un país donde hay deflación.
La solución que te mande si la direccionas a un cursor, te daría los datos que dices necesitar.

Saludos: Miguel, La Pampa (RA)
Larga Vida y Prosperidad
Que la Fuerza los acompañe, el mayor castigo de un bígamo, es : DOS SUEGRAS

mapner

unread,
Jun 23, 2017, 8:53:11 AM6/23/17
to Comunidad de Visual Foxpro en Español
La solución correcta es la de Miguel.
Un caso similar y típico es dada una lista de precios con diferentes fechas de vigencia, se requiere como resultado la lista a última vigencia de cada artículo para una fecha X. 

m.FechaX = DATE(2017,1,1)
SELECT art.art_id, art.art_nombre, art.art_precio, art.art_fechavig FROM articulos art;
WHERE art.art_fechavig = (SELECT MAX(mx.art_fechavig) FROM articulos mx;
                      WHERE mx.art_id = art.art_id and art_fechavig<=m.FechaX)

* otra opción podría ser

m.FechaX = DATE(2017,1,1)
SELECT art.art_id, art.art_nombre, art.art_precio, art.art_fechavig FROM articulos art;
WHERE art.art_fechavig = (SELECT TOP 1 mx.art_fechavig FROM articulos mx;
                      WHERE mx.art_id = art.art_id and art_fechavig<=m.FechaX order by mx.art_fechavig desc)

* Saludos

mpulla

unread,
Jun 23, 2017, 11:53:23 AM6/23/17
to Comunidad de Visual Foxpro en Español
Hola Felipe.

Puedes apoyarte en row_number() me parece que esta disponible desde la versión 2008

Mira este ejemplo

Saludos.
Mauricio
Reply all
Reply to author
Forward
0 new messages