SQL Server y LAST

13/10/2004 - 14:07 por Angel Zapata | Informe spam
Hola a todos, tengo un problema con SQL Server, resulta que bajo Access yo
ejecuto una consulta con la instucción LAST y me funciona al pelo

SELECT AlmacenInventario.InventarioArticulo, Articulo.ArtDescripcion,
Last(AlmacenInventario.InventarioFecha) AS ÚltimoDeInventarioFecha,
Last(AlmacenInventario.InventarioCantidad) AS ÚltimoDeInventarioCantidad,
Last(AlmacenInventario.InventarioObservacion) AS
ÚltimoDeInventarioObservacion
FROM AlmacenInventario INNER JOIN Articulo ON
AlmacenInventario.InventarioArticulo = Articulo.ArtCodigo
GROUP BY AlmacenInventario.InventarioArticulo, Articulo.ArtDescripcion;

pero bajo SQL Server, la instrucción LAST no existe, por tanto debo
sustituirla por MAX, pero esto me da el mayor valor, no el ultimo registro.

Yo necesito, sobre una tabla de inventario, conocer el valor que tiene en
existencias y en observaciones segun la ultima fecha de inventario
realizada, por tanto como cada artículo puede ser inventariado en diferentes
fechas, no me vale el elegir una fecha sino conocer de cada artículo cuando
se inventarió por ultima vez y cual fue su resultado.

Estoy perdido, he buscado y rebuscado y no encuentro nada.

Gracias por adelantado
Angel Zapata
 

Leer las respuestas

#1 Javier Loria
13/10/2004 - 15:18 | Informe spam
Hola:
En SQL se utiliza "conjuntos de datos" que por su naturaleza no son
ordenados ni numerados, por ende LAST/FIRST no tienen sentido ya que no hay
orden.
Si puedes distinguir alguna criterio para seleccionar el "LAST" entonces
puedes construir sentencias para devolver esta ultima fila, claro que son un
rollo para el que esta acostumbrado a usar LAST.
Si usamos de ejemplo Order Details de Northwindy asumiendo que el
criterio es la OrdenID, podrias hacer:
==SELECT O1.ProductID
, O1.UnitPrice
, O1.Quantity
FROM [Order Details] AS O1
JOIN (SELECT ProductID
, MAX(OrderID) AS OrderID
FROM [Order Details]
GROUP BY ProductID) AS O2
ON O1.ProductID=O2.ProductID
AND O1.OrderID=O2.OrderID
== Esto debe darte el LAST de UnitPrice y el LAST de Quantity. El SELECT
interno sirve para seleccionar la ultima fila de cada producto.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"Angel Zapata" wrote in message
news:e5T#
Hola a todos, tengo un problema con SQL Server, resulta que bajo Access yo
ejecuto una consulta con la instucción LAST y me funciona al pelo

SELECT AlmacenInventario.InventarioArticulo, Articulo.ArtDescripcion,
Last(AlmacenInventario.InventarioFecha) AS ÚltimoDeInventarioFecha,
Last(AlmacenInventario.InventarioCantidad) AS ÚltimoDeInventarioCantidad,
Last(AlmacenInventario.InventarioObservacion) AS
ÚltimoDeInventarioObservacion
FROM AlmacenInventario INNER JOIN Articulo ON
AlmacenInventario.InventarioArticulo = Articulo.ArtCodigo
GROUP BY AlmacenInventario.InventarioArticulo, Articulo.ArtDescripcion;

pero bajo SQL Server, la instrucción LAST no existe, por tanto debo
sustituirla por MAX, pero esto me da el mayor valor, no el ultimo


registro.

Yo necesito, sobre una tabla de inventario, conocer el valor que tiene en
existencias y en observaciones segun la ultima fecha de inventario
realizada, por tanto como cada artículo puede ser inventariado en


diferentes
fechas, no me vale el elegir una fecha sino conocer de cada artículo


cuando
se inventarió por ultima vez y cual fue su resultado.

Estoy perdido, he buscado y rebuscado y no encuentro nada.

Gracias por adelantado
Angel Zapata



Preguntas similares