Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Extraer registros con ultima fecha (https://www.clubdelphi.com/foros/showthread.php?t=79134)

ALVARO RUBIO 09-06-2012 17:44:53

Extraer registros con ultima fecha
 
Buen día

Tengo una tabla que tiene los campos consecutivo, código, fecha, costopromedio, entrada, valor, promedio. Cada cogido se repite n veces con fecha diferente, y requiero extraer el ultimo registro de cada código, con los campos cogido, fecha y costopromedio.

En otras palabras necesito saber cual es el costo promedio ultima de cada código.

Gracias

Casimiro Notevi 09-06-2012 17:51:10

¿Y cual es el "último registro de cada código"?, ¿el que tenga la fecha más actual?, ¿el que tenga el 'consecutivo' más alto?, etc.

Casimiro Notevi 09-06-2012 17:54:07

Cita:

Empezado por Casimiro Notevi (Mensaje 434774)
¿Y cual es el "último registro de cada código"?, ¿el que tenga la fecha más actual?, ¿el que tenga el 'consecutivo' más alto?, etc.

Y "el costo promedio último de cada codigo", ¿es el valor del campo costopromedio?, ¿o es el promedio del valor del campo promedio?, ¿o es el último valor del campo promedio?, etc.

Una explicación clara haría falta ;)

ALVARO RUBIO 09-06-2012 17:54:31

Buena pregunta
 
El que tenga la fecha mas actual, que coincide con el que tiene el consecutivo mas alto(Para cada Código (producto))

ALVARO RUBIO 09-06-2012 17:59:27

Aclaracion
 
Es el valor que tenga el campo costopromedio, para el registro

Arubio

ALVARO RUBIO 09-06-2012 18:08:29

No me aplica a cada código
 
Si uso esta expresión me trae solo los registros de la ultima fecha, pero no para cada código, Claro que ca estoy mostrando toso los resultados y solo necesito el código, la fecha y el costo promedio.

Me esta trayendo la consulta sobre toda la tabla, cual es el ultimo codigo, y requiero para cada codigo, cual el el ultimo registro.

select * from itemact where fecha=(select max(fecha)from itemact)

ecfisa 09-06-2012 18:15:42

Cita:

Empezado por ALVARO RUBIO (Mensaje 434773)
Buen día

Tengo una tabla que tiene los campos consecutivo, código, fecha, costopromedio, entrada, valor, promedio. Cada cogido se repite n veces con fecha diferente, y requiero extraer el ultimo registro de cada código, con los campos cogido, fecha y costopromedio.

Hola Alvaro.

Probá de este modo:
Código SQL [-]
SELECT DISTINCT CODIGO, FECHA, COSTOPROMEDIO FROM TU_TABLA T1
WHERE FECHA = (SELECT MAX(FECHA) FROM TU_TABLA T2 WHERE T1.CODIGO = T2.CODIGO)

Saludos.

ALVARO RUBIO 09-06-2012 18:44:12

No S E Ejecuta
 
Efectué el ejercicio y la consulta se queda pagada

ecfisa 09-06-2012 19:08:13

Cita:

Empezado por ALVARO RUBIO (Mensaje 434784)
Efectué el ejercicio y la consulta se queda pagada

Es realmente curioso... acabo de hacer una prueba con estos valores:

Código:

CODIGO        FECHA        COSTOPROMEDIO        ENTRADA        VALOR        PROMEDIO
001        27/05/2012        1        1        1        1
002        27/05/2012        2        2        2        2
001        30/05/2012        3        3        3        3
002        30/05/2012        4        4        4        4
003        27/05/2012        5        5        5        5
001        01/06/2012        8        8        8        8
004        27/05/2012        6        6        6        6
003        30/05/2012        7        7        7        7
001        09/06/2012        9        9        9        9

La misma consulta:
Código SQL [-]
SELECT DISTINCT CODIGO, FECHA, COSTOPROMEDIO FROM TU_TABLA T1
WHERE FECHA = (SELECT MAX(FECHA) FROM TU_TABLA T2 WHERE T1.CODIGO = T2.CODIGO)

Y obengo estos resultados:
Código:

CODIGO        FECHA        COSTOPROMEDIO
001        09/06/2012        9
002        30/05/2012        4
003        30/05/2012        7
004        27/05/2012        6

Es decir lo que solicitaste: "el ultimo registro de cada código, con los campos codigo, fecha y costopromedio"

Todo esto bajo la lógica suposición que un registro con el mismo código será posterior acorde a la fecha...

Saludos.

ALVARO RUBIO 13-06-2012 23:37:33

Si esd exacto lo que necesito
 
Voy a ver que no este cometiendo algun error, la tabla tiene 433366 registros

ALVARO RUBIO 14-06-2012 00:16:07

No Me Genera Un Resultado
 
Revise y no encontre error, pero al ejecutar la consulta se queda pegado, hasta ahora lleva 40 minutos y sigue sin terminar , la tabla tiene 433 registros y el resultado no debe de superar los 4000, que son los porductos qwue manejamos.

Alguna sugerencia.

mightydragonlor 14-06-2012 05:35:11

Código SQL [-]
select Top 1 Codigo, Fecha, Costopromedio From Tu_tabla T1
Order By Fecha Desc

ALVARO RUBIO 14-06-2012 16:59:15

Intente Esta Otra Opcion
 
Me genera error en el caracter 11. o sea el 1 despues de TOP.


Agradezco le des una revisadita


Arubio

mightydragonlor 14-06-2012 17:03:44

Acá justo lo acabo de probar en mi SQL2005, con una base de datos que tengo:
Código SQL [-]
SELECT TOP 1 strNumeroRemesa FROM tblRemesas
ORDER BY dtFechaRemesa DESC

Me funciona perfectamente, esí que lo que importa es la idea, debe ser error de nombre de campo o tabla, trata de implementarlo con tu base de datos y tablas.

Saludos.

ALVARO RUBIO 14-06-2012 23:03:39

Funciono Perfecto
 
Probe esta respuesta en una copia de la base de datos donde no estaba conectado ningun usuario y me genero la respuetsa correcta.

select distinct item, fecha, costop from ITEMACT T1
WHERE fecha = (select max(fecha) from ITEMACT T2 where T1.item=T2.item)

Voy a evaluar la otra opcion revisando lo que me sugieren.

Graccias or la yuda

Casimiro Notevi 14-06-2012 23:13:42

Código SQL [-]
select distinct item, fecha, costop from ITEMACT T1
WHERE fecha = (select max(fecha) from ITEMACT T2 where T1.item=T2.item)


Recuerda poner los tags al código fuente, ejemplo:



Gracias :)

ALVARO RUBIO 14-06-2012 23:36:56

No Tan Perfecto
 
Celebre antes de tiempo, gracias por la aclaracion del estilo.

La consulta me esta generando registros duplicados, de 21000 registros 540 son duplicados, de codigos que tuvieron mas de un movimiento en la ultima fecha

Karzie 05-07-2012 22:16:17

Solución
 
Código SQL [-]
Esta Query te sacará de apuros:

select Id, Fecha, CostoPromedio  from Montos_Promedios tbl
where EXISTS(select ID,Max(Fecha) As Fecha from Montos_Promedios Group by ID HAVING ID = tbl.ID And Max(Fecha) = tbl.Fecha)
Order by ID

1    2012-06-09 00:00:00.000    9.00
2    2012-05-30 00:00:00.000    4.00
3    2012-05-30 00:00:00.000    7.00
4    2012-05-27 00:00:00.000    6.00


La franja horaria es GMT +2. Ahora son las 12:20:03.

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