Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Necesito obtener el último valor de cada indicador (en la misma consulta)

Estas en el tema de Necesito obtener el último valor de cada indicador (en la misma consulta) en el foro de SQL Server en Foros del Web. Tengo un pequeño problema que no he podido resolver y me vendría bien un poco de ayuda. El problema es el siguiente: Dispongo de una ...
  #1 (permalink)  
Antiguo 26/12/2011, 10:53
 
Fecha de Ingreso: diciembre-2011
Mensajes: 77
Antigüedad: 12 años, 4 meses
Puntos: 2
Necesito obtener el último valor de cada indicador (en la misma consulta)

Tengo un pequeño problema que no he podido resolver y me vendría bien un poco de ayuda. El problema es el siguiente:

Dispongo de una tabla que tiene una estructura similar a está:

Fecha Indicador Valor
30/11/2011 A 30
30/11/2011 B 30
30/11/2011 C 30
1/12/2011 A 30
1/12/2011 B 30
1/12/2011 C 30
2/12/2011 A 30
2/12/2011 B 30

…y necesito construir una consulta SQL que me devuelva las filas de las últimas Fechas de todos los indicadores. O sea, para los datos anteriores,:

1/12/2011 C 30
2/12/2011 A 30
2/12/2011 B 30

El problema es que necesito obtener es el último valor de cada indicador (en la misma consulta) sin consultar uno a uno pues la tabla es muy grande y son al menos 300 indicadores.
  #2 (permalink)  
Antiguo 26/12/2011, 13:12
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Necesito obtener el último valor de cada indicador (en la misma consulta)

Agrupando por MAX(tufecha), ¿ya lo intentaste?
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 27/12/2011, 13:01
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Necesito obtener el último valor de cada indicador (en la misma consulta)

select fecha, indicador, valor from tabla where fecha=(select max(fecha) from tabla group by indicador,valor)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 27/12/2011, 14:20
 
Fecha de Ingreso: diciembre-2011
Mensajes: 77
Antigüedad: 12 años, 4 meses
Puntos: 2
Respuesta: Necesito obtener el último valor de cada indicador (en la misma consulta)

Hola Libras (e iislas), fíjate que para el conjunto de datos de ejemplo que pongo no se cumple la sentencia que propones.
La idea es que no necesariamente para la última fecha tienen que estar definidos todos los indicadores. En el ejemplo que puse , el Indicador C no tenía valor en la fecha 2/12/2011.


Saludos cordiales.
  #5 (permalink)  
Antiguo 27/12/2011, 16:29
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Necesito obtener el último valor de cada indicador (en la misma consulta)

ok entonces le puedes hacer asi:

select fecha, indicador, valor from tabla where fecha+'|'+indicador+'|'+valor=(select max(fecha)+'|'+indicador+'|'+valor from tabla group by indicador,valor)

o no???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 27/12/2011, 17:31
 
Fecha de Ingreso: diciembre-2011
Mensajes: 77
Antigüedad: 12 años, 4 meses
Puntos: 2
Respuesta: Necesito obtener el último valor de cada indicador (en la misma consulta)

Libras, la consulta no me funciona ; y me devuelve el siguiente error:
"Conversion failed when converting date and/or time from character string."
  #7 (permalink)  
Antiguo 27/12/2011, 17:43
 
Fecha de Ingreso: diciembre-2011
Mensajes: 77
Antigüedad: 12 años, 4 meses
Puntos: 2
Respuesta: Necesito obtener el último valor de cada indicador (en la misma consulta)

Otra cosa, si me pudieras ayudar un poco pues he buscado y no encuentro que significa esta expresión:

fecha+'|'+indicador
  #8 (permalink)  
Antiguo 28/12/2011, 09:31
 
Fecha de Ingreso: diciembre-2011
Mensajes: 77
Antigüedad: 12 años, 4 meses
Puntos: 2
Respuesta: Necesito obtener el último valor de cada indicador (en la misma consulta)

Me parece que resolví con esta consulta:

select p.Fecha, p.Indicador, p.Valor from Tabla p
inner join
(
select max(Fecha) as oFecha, Indicador from Tabla
group by Indicador) o
on p.Fecha = o.oFecha and p.Indicador= o.Indicador


de todas formas muchas gracias a quienes me ayudaron.
  #9 (permalink)  
Antiguo 28/12/2011, 09:41
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Necesito obtener el último valor de cada indicador (en la misma consulta)

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. fecha datetime,
  4. indicador VARCHAR(2),
  5. valor INT
  6. )
  7.  
  8.  
  9. INSERT INTO #temp VALUES ('11/30/2011', 'A', 30)
  10. INSERT INTO #temp VALUES ('11/30/2011', 'B', 30)
  11. INSERT INTO #temp VALUES ('11/30/2011','C', 30)
  12. INSERT INTO #temp VALUES ('12/1/2011', 'A', 30)
  13. INSERT INTO #temp VALUES ('12/1/2011', 'B', 30)
  14. INSERT INTO #temp VALUES ('12/1/2011', 'C', 30)
  15. INSERT INTO #temp VALUES ('12/2/2011', 'A', 30)
  16. INSERT INTO #temp VALUES ('12/2/2011', 'B', 30)
  17.  
  18.  
  19. SELECT * FROM #temp WHERE CONVERT(VARCHAR(10),fecha) + '|' + indicador IN
  20. (SELECT CONVERT(VARCHAR(10),MAX(fecha)) + '|' + indicador  FROM #temp GROUP BY indicador)
  21.  
  22. Resultado:
  23.  
  24. 2011-12-01 00:00:00.000 C   30
  25. 2011-12-02 00:00:00.000 A   30
  26. 2011-12-02 00:00:00.000 B   30

Que significa fecha + '|' + indicador el '|' es un caracter que el agregue para separar los valores de fecha y de indicador para hacer la comparacion :)


Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: fecha, indicador, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:31.