Ver ult precio cada articulo

210 views
Skip to first unread message

Angel Dario Rodriguez

unread,
Sep 18, 2017, 2:40:46 AM9/18/17
to publice...@googlegroups.com
Buenas foxeros. 
Puedo alguien darme una idea de como armar un query en SQL para ver el ultimo precio de venta de cada articulo?

Gracias anticipadas.

Angel Dario Rodriguez.

mapner

unread,
Sep 18, 2017, 8:42:28 AM9/18/17
to Comunidad de Visual Foxpro en Español
Hola,

podría ser algo así...

select v1.art_id, a1.art_nombre, v1.fecha, max(v1.preciouni) 
from ventas v1 
join articulos a1 on v1.art_id = a1.art_id
group by  1,2,3
having v1.fecha = (select max(v2.fecha) from ventas v2 where v2.art_id = v1.art_id)

Saludos

Angel Dario Rodriguez

unread,
Sep 18, 2017, 8:35:27 PM9/18/17
to publice...@googlegroups.com
Gracias Mauricio por tu amabilidad. Lo probare.

Angel Dario Rodriguez

unread,
Sep 25, 2017, 3:21:52 PM9/25/17
to publice...@googlegroups.com
Mauricio, cuando trato de ejecutar el ejemplo que gentimente me enviaste me da este error:
Msg 164, Level 15, State 1, Line 5
Each GROUP BY expression must contain at least one column that is not an outer reference.

Este es el query que utilizo:

select d2.articulo, a.nombre_art, d2.fecha_emi, max(d2.precio_und)
 from hedocum02 d2
 join hemarti01 a on d2.articulo = a.articulo
 group by 1,2,3
 having d2.fecha_emi = (select max(d3.fecha_emi) from hedocum02 d3 where d3.articulo = d2.articulo)

Tuve algun error de interpretacion?

Víctor Hugo Espínola Domínguez

unread,
Sep 25, 2017, 5:59:44 PM9/25/17
to publice...@googlegroups.com
Mira si te sirve de guía:

Local lcSelIdVta As String,     ;
    lcSelUltPrecio As String

Open Database (_Samples + "Northwind\Northwind")

Text To m.lcSelIdVta Textmerge Noshow Pretext 15
Select  det.ProductId
      , Max(ord.OrderDate) As FecUltVenta
      , Max(ord.OrderId) As UltIdVenta
    From OrderDetails As det
    Left Join Orders As ord
        On det.OrderId = ord.OrderId
    Group By ProductId
Endtext
*--&lcSelIdVta

Text To m.lcSelUltPrecio Textmerge Noshow Pretext 15
Select  uiv.ProductId
      , prd.ProductName
      , uiv.UltIdVenta
      , uiv.FecUltVenta
      , det.UnitPrice
    From (<<m.lcSelIdVta>>) As uiv
    Inner Join Products As prd
        On uiv.ProductId = prd.ProductId
    Inner Join OrderDetails As det
        On uiv.ProductId = det.ProductId
        And uiv.UltIdVenta = det.OrderId
    Order By prd.ProductId
Endtext

&lcSelUltPrecio


Saludos,
Víctor.
Lambaré - Paraguay.

Angel Dario Rodriguez

unread,
Sep 25, 2017, 10:51:45 PM9/25/17
to publice...@googlegroups.com
Gracias Mestro por su amabilidad. Lo probare.

Idalberto Gonzalez

unread,
Sep 26, 2017, 1:23:46 AM9/26/17
to Comunidad de Visual Foxpro en Español

Creo que tu problema está aquí:

   select ...............     max(d2.precio_und)

   debe ser:
   
   select ...............     max(d2.precio_und) as elnombrequequieras

Angel Dario Rodriguez

unread,
Sep 26, 2017, 11:52:00 PM9/26/17
to publice...@googlegroups.com
Idalberto, No me funciona.

Víctor Hugo Espínola Domínguez

unread,
Sep 27, 2017, 12:14:49 AM9/27/17
to publice...@googlegroups.com
Cual es la clave de la la tabla hedocum02?

Saludos,
Víctor.
Lambaré - Paraguay.


Angel Dario Rodriguez

unread,
Sep 27, 2017, 10:51:18 PM9/27/17
to publice...@googlegroups.com
DOCUMENTO VARCHAR(25) Y SECUENCIA VARCHAR(3)

2017-09-27 0:14 GMT-04:00 Víctor Hugo Espínola Domínguez <vich...@gmail.com>:
Cual es la clave de la la tabla hedocum02?

Saludos,
Víctor.
Lambaré - Paraguay.


Víctor Hugo Espínola Domínguez

unread,
Sep 27, 2017, 11:12:36 PM9/27/17
to publice...@googlegroups.com
Significa que el último precio del artículo corresponde a la máxima secuencia del documento?

Saludos,
Víctor.
Lambaré - Paraguay.


Angel Dario Rodriguez

unread,
Sep 27, 2017, 11:26:39 PM9/27/17
to publice...@googlegroups.com
No necesariamente, la idea que tengo es poder saber por cliente o suplidor cual es el ultimo precio a que le vendi o le compre por articulo, sin importar rango de tiempo.

2017-09-27 23:12 GMT-04:00 Víctor Hugo Espínola Domínguez <vich...@gmail.com>:
Significa que el último precio del artículo corresponde a la máxima secuencia del documento?

Saludos,
Víctor.
Lambaré - Paraguay.


Víctor Hugo Espínola Domínguez

unread,
Sep 27, 2017, 11:30:44 PM9/27/17
to publice...@googlegroups.com
La secuencia empieza en 1 y se va incrementando sin resetear por mes o año?

Por cada artículo debes mostrar ambos últimos precios (compra y venta)?

Saludos,
Víctor.
Lambaré - Paraguay.


Víctor Hugo Espínola Domínguez

unread,
Sep 27, 2017, 11:32:38 PM9/27/17
to publice...@googlegroups.com
En heDocum02 debes tener un dato que identifique la compra o venta.

Saludos,
Víctor.
Lambaré - Paraguay.


El 27 de septiembre de 2017, 23:30, Víctor Hugo Espínola Domínguez<vich...@gmail.com> escribió:
La secuencia empieza en 1 y se va incrementando sin resetear por mes o año?

Por cada artículo debes mostrar ambos últimos precios (compra y venta)?

Saludos,
Víctor.
Lambaré - Paraguay.


Angel Dario Rodriguez

unread,
Sep 27, 2017, 11:34:00 PM9/27/17
to publice...@googlegroups.com
No maestro, puede ser que yo quiera saber el ultimo precio de venta o de compra, nunca ambos. La secuencia es simplemente la posicion del registro dentro de la factura de venta o compra, es decir, que si un cliente me compro algo, esa factura puede tener 2,3,4, 5 o mas items, sin importar el codigo del articulo de cada item.

2017-09-27 23:30 GMT-04:00 Víctor Hugo Espínola Domínguez <vich...@gmail.com>:
La secuencia empieza en 1 y se va incrementando sin resetear por mes o año?

Por cada artículo debes mostrar ambos últimos precios (compra y venta)?

Saludos,
Víctor.
Lambaré - Paraguay.


Angel Dario Rodriguez

unread,
Sep 27, 2017, 11:34:54 PM9/27/17
to publice...@googlegroups.com
Claro, en el campo Documento, esta indicado el tipo de documento que es, puede ser un compra o una venta.

mpulla

unread,
Sep 27, 2017, 11:36:24 PM9/27/17
to Comunidad de Visual Foxpro en Español
Hola Angel

que SGDB usas?

Saludos.
Mauricio

Víctor Hugo Espínola Domínguez

unread,
Sep 27, 2017, 11:37:03 PM9/27/17
to publice...@googlegroups.com
Entonces el último precio corresponde a la fecha máxima del documento? Se supone en ese caso que durante el mismo día el precio no tuvo variación.

Saludos,
Víctor.
Lambaré - Paraguay.


Angel Dario Rodriguez

unread,
Sep 27, 2017, 11:40:17 PM9/27/17
to publice...@googlegroups.com
SQL server 2012.

2017-09-27 23:36 GMT-04:00 Víctor Hugo Espínola Domínguez <vich...@gmail.com>:
Entonces el último precio corresponde a la fecha máxima del documento? Se supone en ese caso que durante el mismo día el precio no tuvo variación.

Saludos,
Víctor.
Lambaré - Paraguay.


Angel Dario Rodriguez

unread,
Sep 27, 2017, 11:41:31 PM9/27/17
to publice...@googlegroups.com
Correcto maestro, ese precio, sin importar el monto, corresponde a la ultima fecha en que el cliente nos compro el articulo o que compramos el articulo a un proveedor.

Víctor Hugo Espínola Domínguez

unread,
Sep 27, 2017, 11:42:13 PM9/27/17
to publice...@googlegroups.com
Mira si funciona este código:


Text To m.lcSelIdVta Textmerge Noshow Pretext 15
Select  det.ProductId
      , Max(doc.Fecha_Emi) As FecUltMov
    From heDocum02 As det
    Where det.AlgunDato corresponde a Venta o Compra

    Group By ProductId
Endtext
*--&lcSelIdVta

Text To m.lcSelUltPrecio Textmerge Noshow Pretext 15
Select  uiv.ProductId
      , art.ProductName
      , uiv.FecUltMov
      , det.Precio_Und
    From (<<m.lcSelIdVta>>) As ud
    Inner Join heMArti01 As art
        On uiv.ProductId = art.ProductId
    Inner Join heDocum02 As det
        On ud.ProductId = det.ProductId
            And ud.FecUltMov = det.Fecha_Emi
    Order By art.ProductId
Endtext

*--&lcSelUltPrecio
*!*    Si es con dbf ejeduta con EXECSCRIPT(m.lcSelUltPrecio)
*!*    Si es otro motor SQL con SQLEXEC(nConexion, m.lcSelUltPrecio, "curUltPrecios")

Saludos,
Víctor.
Lambaré - Paraguay.


Angel Dario Rodriguez

unread,
Sep 27, 2017, 11:58:01 PM9/27/17
to publice...@googlegroups.com
Gracias maestro, lo probare y le avisare.

Víctor Hugo Espínola Domínguez

unread,
Sep 28, 2017, 12:08:12 AM9/28/17
to publice...@googlegroups.com
, uiv.FecUltMov

debe ser

, ud.FecUltMov

Saludos,
Víctor.
Lambaré - Paraguay.


mpulla

unread,
Sep 28, 2017, 10:05:49 AM9/28/17
to Comunidad de Visual Foxpro en Español
Hola Angel

Prueba

With t
AS 
(
select d2.articulo, a.nombre_art, d2.fecha_emi, d2.precio_und, 
       row_number() OVER (PARTITION BY d2.articulo ORDER BY d2.fecha_emi DESC) as rnw
 from hedocum02 d2 
      Inner join hemarti01 a on d2.articulo = a.articulo
 )
Select t.*
 From t 
  Where rnw = 1;

Saludos
Mauricio

Angel Dario Rodriguez

unread,
Sep 28, 2017, 8:17:21 PM9/28/17
to publice...@googlegroups.com
Gracias amigo, esta rutina me funciono bastante bien y me servira para otras consultas y reportes adicionales, gracial mil. Tambien a todos los maestros que gentilmente me estuvieron asistiendo.
Reply all
Reply to author
Forward
0 new messages