Obtener el ultimo precio de compra.

12/12/2006 - 18:51 por Salvador Ramos | Informe spam
Hola a todos tengo una tabla de Compras con las siguientes columnas:
Almacen, CodArticulo, Fecha, CodProveed, Cantidad, Precio, Importe
1 1 1-1-6 3 10 5
50
1 1 2-1-6 3 5 4
20
2 1 1-1-6 3 10 5
50
2 1 2-1-6 3 5 4
20
No tiene Primary Key, es una tabla de una aplicación de tercero que hay en
mi empresa, no puedo tocar el diseño actual.

Necesito obtener la fila de la última compra de cada uno de los artículos en
cada almacen. No se si estoy hoy un poquito espeso, pero no logro dar con la
solución. En el ejemplo anterior, todas las columnas de la segunda fila y la
cuarta fila.

Muchas gracias

Un saludo
Salvador Ramos
Murcia - España

[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL Server y .NET)

Preguntas similare

Leer las respuestas

#1 Ibon Colias
12/12/2006 - 19:00 | Informe spam
Hola Salvador !!

Prueba algo parecido a esto
SELECT Almacen, CodArticulo, Fecha, CodProveed, Cantidad, Precio, Importe
FROM Compras
GROUP BY Almacen, CodArticulo
HAVING Fecha = (select max(T0.Fecha)
from Compras T0
Where T0.Almacen = Compras.Almacen
and T0.CodArticulo =
Compras.CodArticulo
)

Saludos

"Salvador Ramos" escribió en el
mensaje news:
Hola a todos tengo una tabla de Compras con las siguientes columnas:
Almacen, CodArticulo, Fecha, CodProveed, Cantidad, Precio, Importe
1 1 1-1-6 3 10
5 50
1 1 2-1-6 3 5
4 20
2 1 1-1-6 3 10
5 50
2 1 2-1-6 3 5
4 20
No tiene Primary Key, es una tabla de una aplicación de tercero que hay en
mi empresa, no puedo tocar el diseño actual.

Necesito obtener la fila de la última compra de cada uno de los artículos
en cada almacen. No se si estoy hoy un poquito espeso, pero no logro dar
con la solución. En el ejemplo anterior, todas las columnas de la segunda
fila y la cuarta fila.

Muchas gracias

Un saludo
Salvador Ramos
Murcia - España

[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL Server y .NET)



Respuesta Responder a este mensaje
#2 Salvador Ramos
13/12/2006 - 11:23 | Informe spam
Muchas gracias,

En la respuesta a Alejandro, tienes la solución por la que he optado.

Un saludo
Salvador Ramos
Murcia - España

[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL Server y .NET)


"Ibon Colias" escribió en el mensaje
news:
Hola Salvador !!

Prueba algo parecido a esto
SELECT Almacen, CodArticulo, Fecha, CodProveed, Cantidad, Precio, Importe
FROM Compras
GROUP BY Almacen, CodArticulo
HAVING Fecha = (select max(T0.Fecha)
from Compras T0
Where T0.Almacen = Compras.Almacen
and T0.CodArticulo =
Compras.CodArticulo
)

Saludos

"Salvador Ramos" escribió en el
mensaje news:
Hola a todos tengo una tabla de Compras con las siguientes columnas:
Almacen, CodArticulo, Fecha, CodProveed, Cantidad, Precio, Importe
1 1 1-1-6 3 10 5 50
1 1 2-1-6 3 5 4 20
2 1 1-1-6 3 10 5 50
2 1 2-1-6 3 5 4 20
No tiene Primary Key, es una tabla de una aplicación de tercero que hay
en mi empresa, no puedo tocar el diseño actual.

Necesito obtener la fila de la última compra de cada uno de los artículos
en cada almacen. No se si estoy hoy un poquito espeso, pero no logro dar
con la solución. En el ejemplo anterior, todas las columnas de la segunda
fila y la cuarta fila.

Muchas gracias

Un saludo
Salvador Ramos
Murcia - España

[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL Server y .NET)







Respuesta Responder a este mensaje
#3 Salvador Ramos
13/12/2006 - 11:31 | Informe spam
Hola Alejandro,

Tenía un problema adicional que me estaba volviendo loco, y es que tengo en
ciertas ocasiones más de una fila de la misma fecha, almacen y artículo
(precisamente se daba esa situación con los datos que estaba haciendo las
pruebas). Lo que estaba haciendo que me devolviese más filas de las
esperadas, aunque el resultado es correcto y debe devolver dichas filas, no
lo entendía como correcto en esos momentos, y me llevo a exponer aquí el
problema.
Que bueno es llegar por la mañana y despejado para estos temas :-)

Finalmente, he optado por la segunda opción. Aunque ahora me dan un
rendimiento muy similar, la tabla seguirá creciendo.

Muchas gracias.

Un saludo
Salvador Ramos
Murcia - España

[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL Server y .NET)


"Alejandro Mesa" escribió en el
mensaje news:
Salvador,

1 -

select a.*
from dbo.t1 as a
where fecha = (
select top 1 b.fecha
from dbo.t1 as b
where b.almacen = a.almacen and b.CodArticulo = a.CodArticulo
order by b.fecha desc
)
go


2 -

select a.*
from dbo.t1 as a
inner join
(
select almacen, codarticulo, max_fecha as fecha
from dbo.t1
group by almacen, codarticulo
) as b
on a.almacen = b.almacen and a.codarticulo = b.codarticulo
and a.fecha = b.max_fecha
go

Si hay pocas filas la opcion 1 es buena. Si hay muchas filas,
definitivamente la segunda opcion tendra rendimiento. Prueba en tu caso a
ver
cual brinda mejor rendimiento,

Saludos,

Alejandro Mesa

"Salvador Ramos" wrote:

Hola a todos tengo una tabla de Compras con las siguientes columnas:
Almacen, CodArticulo, Fecha, CodProveed, Cantidad, Precio, Importe
1 1 1-1-6 3 10
5
50
1 1 2-1-6 3 5
4
20
2 1 1-1-6 3 10
5
50
2 1 2-1-6 3 5
4
20
No tiene Primary Key, es una tabla de una aplicación de tercero que hay
en
mi empresa, no puedo tocar el diseño actual.

Necesito obtener la fila de la última compra de cada uno de los artículos
en
cada almacen. No se si estoy hoy un poquito espeso, pero no logro dar con
la
solución. En el ejemplo anterior, todas las columnas de la segunda fila y
la
cuarta fila.

Muchas gracias

Un saludo
Salvador Ramos
Murcia - España

[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL Server y .NET)




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida