Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Funcion Ultima fecha (https://www.clubdelphi.com/foros/showthread.php?t=49975)

guille85 05-11-2007 15:39:59

Funcion Ultima fecha
 
Tengo un problemilla con una consulta de Movimientos de Articulos i fechas!
Estoy trabajando con access.

Me gustaria saber si existe alguna funcion para averiguar, en mi caso, de los diferentes movimientos que puede tener un articulo, la ultima fecha que hubo en ese articulo!

SIno recuerdo mal en Oracle existia alguna opcion de estas pero en Access no tengo nidea

por ejemplo : Esto podria ser la tabla de movimientos

Articulo | Cantidad | Fecha |
--------------------------------------------------
11000 | 2.500 | 11/05/2007 |
11000 | 3.000 | 16/07/2007 |
13000 | 10.500 | 13/04/2007 |
13000 | 13.000 | 15/06/2007 |


La Consulta deberia quedar de la siguiente forma

11000 | 3000 | 16/07/2007
13000 | 13.000 | 15/06/2007

marcoszorrilla 05-11-2007 15:56:09

Puedes utilizar la funcion Max(Fecha).

Un Saludo.

poliburro 05-11-2007 16:19:02

Cita:

Empezado por marcoszorrilla (Mensaje 243502)
Puedes utilizar la funcion Max(Fecha).

Como bien dice el amigo marcos.

Código SQL [-]
 
Select Original.Articulo, Original.Fecha, Original.Cantidad
  From Tabla as Original
Inner join (
                   Select Articulo, Max(Fecha) As FecMAx
                     From Tabla
                Group By Articulo
             ) as Filtro
       On Original.Articulo = Filtro.Articulo And
            Original.Fecha  = Filtro.FecMax

suerte

guille85 05-11-2007 16:30:33

Gracias gente voy a provar!

:)

ContraVeneno 05-11-2007 16:36:53

Código SQL [-]
Select Articulo, Max(Fecha)
from Tabla
group by Articulo

mi buen poliburro, no entendí porque hacer una subconsulta...

poliburro 05-11-2007 16:47:50

Cita:

Empezado por ContraVeneno (Mensaje 243528)
Código SQL [-]
Select Articulo, Max(Fecha)
from Tabla
group by Articulo





mi buen poliburro, no entendí porque hacer una subconsulta...

Por que además del artículo y la última fecha, necesita la cantidad.

:P

ContraVeneno 05-11-2007 16:58:21

Lo sospeche desde un principio...

guille85 05-11-2007 17:23:34

agrrrrr me estoy volviendo loco!

Si solo indico el campo codigo y fecha,Me muestra todos los articulos como queria.

Al poner mas campos me obliga a hacer la subconsulta , es ahi cuando nose por donde cojer lo de la fecha ni como indicarlo ni na!

E provao tu opcion Poliburro, pero no entiendo muy bien la Inner join que as echo!

poliburro 05-11-2007 19:08:10

Cita:

Empezado por guille85 (Mensaje 243561)
E provao tu opcion Poliburro, pero no entiendo muy bien la Inner join que as echo!

ok te explico,

La subconculta devuelve un recordset que contiene los artículos con su última fecha, este recordset muestra para cada único artículo la última fecha ( Max(Fecha) ).

Como bien mencionas si en esta subconsulta agregara el campo Cantidad, este debería ser incluido en el group by, pero dada esta condición me mostraría para cada combinación única de artículo y cantidad la úlñtima fecha, provocando que devolviera más de un registro por artículo único. Por ello la subconsulta solo agrupa por artículo y devuelve el max de la fecha.

una vez generado este recorset me hace falta el dato de cantidad para cada registro, entonces lo que hago es que a la tabla le aplico un inner join, con la subsconsulta a fin de que me devuelva unicamente los campos coincidentes.
por eso es que en el on se igualan fecha y artículo.

Al obtener el producto de ambas tablas por unicamente sus coincidencias, puedo ya entonces mostrar Artículo, ultima fecha y cantidad.


Suerte

marcoszorrilla 05-11-2007 21:46:01

Código SQL [-]
Select Articulo, Max(Fecha), Sum(Cantidad)
from Tabla
group by Articulo
o


Un Saludo.

ContraVeneno 05-11-2007 21:53:35

El detalle es que no se busca la suma de todos, solamente la cantidad de la última fecha.

marcoszorrilla 05-11-2007 21:57:45

Pues ese detalle se me había escapado, tienes razón.

Yo en estos casos, sino tengo tiempo de enredarme en subconsultas que no todos los motores aceptan, los datos obtenidos de la consulta los inserto en una tabla temporal y luego lanzo un SQL simple sobre está tabla.

Un Saludo.

poliburro 05-11-2007 22:13:00

Cita:

Empezado por marcoszorrilla (Mensaje 243660)

Yo en estos casos, sino tengo tiempo de enredarme en subconsultas que no todos los motores aceptan, los datos obtenidos de la consulta los inserto en una tabla temporal y luego lanzo un SQL simple sobre está tabla.

Un Saludo.

Tienes razón amigo marcos, solo que en este caso el motor en específico es access, y la consulta como la he formulado está optimizada para este motor en específico.

Saludos cordiales :d

guille85 07-11-2007 11:35:31

Al final consigue sacar lo que queria!!

Muchisimas Gracias :)

marcoszorrilla 07-11-2007 15:52:37

Hombre sería conveniente mostrar el código que finalmente has utilizado como colofón a este hilo.

Un Saludo.

guille85 07-11-2007 16:51:23

:) lo siento llebaba todo el dia un poco liao!
Al final me vais a matar porque saque la consulta con otros datos! Os cuento, mi intencion era a partir de una tabla que hay de movimientos cojer todos los Productos con la ultima fecha y su respectivo precio, mi sorpresa ha sido el encontrar un tabla de tarifas la cual me facilito mucho la faena, porque sinceramente no consegui sacar-la como en un principio queria

Al final lo del Max(fecha) con la opcion de poliburro (pero un poco con mi lio mental) llego a salir pero con algunos articulos repetidos con fechas diferentes, total que aun no se muy bien como funcionan las subconsultas,

La cosa ha quedao asi

Código SQL [-]
SELECT DISTINCTROW TarifaPrecio.CodigoArticulo, Articulos.DescripcionArticulo, TarifaPrecio.Precio1,Tarifas.DescripcionTarifa
FROM (Articulos RIGHT JOIN TarifaPrecio ON Articulos.CodigoArticulo = TarifaPrecio.CodigoArticulo) 
LEFT JOIN Tarifas ON TarifaPrecio.Tarifa = Tarifas.Tarifa 
WHERE ( [TarifaPrecio].[Tarifa] = 24 AND  [TarifaPrecio].[FechaInicio] BETWEEN #01/01/2002# AND #12/31/3000# AND  
[TarifaPrecio].[StatusActivo] = -1)  ORDER BY [TarifaPrecio].[CodigoArticulo],
[TarifaPrecio].[Tarifa],[TarifaPrecio].[FechaInicio],[TarifaPrecio].[StatusActivo]


Perdonad las molestias!! y gracias


La franja horaria es GMT +2. Ahora son las 15:33:21.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi