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

Ayuda con consulta

Estas en el tema de Ayuda con consulta en el foro de Bases de Datos General en Foros del Web. Hola tengo una tabla que contiene muchas lineas, cada una tiene un campo de año, mes y día. Necesito obtener todas las líneas en que ...
  #1 (permalink)  
Antiguo 25/06/2010, 05:38
 
Fecha de Ingreso: julio-2009
Mensajes: 46
Antigüedad: 14 años, 9 meses
Puntos: 0
Ayuda con consulta

Hola tengo una tabla que contiene muchas lineas, cada una tiene un campo de año, mes y día.
Necesito obtener todas las líneas en que la fecha sea la más alta.
Alguien sabe como hacerlo?
Mis conocimientos de SQL son básicos.
Saludos.
  #2 (permalink)  
Antiguo 25/06/2010, 11:21
Avatar de vrenzo  
Fecha de Ingreso: febrero-2007
Mensajes: 289
Antigüedad: 17 años, 2 meses
Puntos: 15
Respuesta: Ayuda con consulta

Si usas el MAX(campo)

Código SQL:
Ver original
  1. SELECT MAX(campo_fecha), etc... FROM tu_tabla WHERE ..

Saludos...
__________________
***
Saludos.
  #3 (permalink)  
Antiguo 26/06/2010, 19:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Ayuda con consulta

Primero debes aclararnos alguna cosa.
Dices que tienes en cada registro o línea campos para año, mes día. Se tratará de campos de tipo INT o VARCHAR.
Te has equivocado al plantear tu base, creo, pues deberías haber creado un campo tipo DATE para incluir la fecha con el formato año-mes-día, ej., 2010-06-27
y ahora podrías obtener lo que quieres sin tener que reunir los datos ni hacer casting a fecha.
Para obtener todas las líneas cuya fecha es la más alta, tendrás que usar MAX(campofecha) pero tendrás que usarlo en una subconsulta.
Imaginemos que ya tienes un campofecha de tipo DATE con las fechas incluidas como te dije
SELECT * FROM tutabla WHERE campofecha = (SELECT MAX(campofecha) FROM tutabla)

Si no pudieras cambiar ahora los tres campos a uno sólo, podríamos ofrecerte otra solución con la función STR_TO_DATE, pero debes decirnos cómo guardas los datos del año, mes y día, por ej., si guardas con el 0 por delante en el mes y día
  #4 (permalink)  
Antiguo 28/06/2010, 01:17
 
Fecha de Ingreso: julio-2009
Mensajes: 46
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Ayuda con consulta

Cita:
Iniciado por jurena Ver Mensaje
Primero debes aclararnos alguna cosa.
Dices que tienes en cada registro o línea campos para año, mes día. Se tratará de campos de tipo INT o VARCHAR.
Te has equivocado al plantear tu base, creo, pues deberías haber creado un campo tipo DATE para incluir la fecha con el formato año-mes-día, ej., 2010-06-27
y ahora podrías obtener lo que quieres sin tener que reunir los datos ni hacer casting a fecha.
Para obtener todas las líneas cuya fecha es la más alta, tendrás que usar MAX(campofecha) pero tendrás que usarlo en una subconsulta.
Imaginemos que ya tienes un campofecha de tipo DATE con las fechas incluidas como te dije
SELECT * FROM tutabla WHERE campofecha = (SELECT MAX(campofecha) FROM tutabla)

Si no pudieras cambiar ahora los tres campos a uno sólo, podríamos ofrecerte otra solución con la función STR_TO_DATE, pero debes decirnos cómo guardas los datos del año, mes y día, por ej., si guardas con el 0 por delante en el mes y día
Gracias por responder. Lo ideal seria tener el campo tal y como lo dices pero es una adaptación para una aplicación antigua y cada campo (año, mes y día) está en una variable de tipo entero.
He hecho la consulta pero tengo el problema que los meses y años que son de 1 digito, los pone como debe, con 1 digito.
Código:
SELECT max(concat(concat(año,mes),dia)) FROM divisas where
codigo='USD'
Me devuelve la fecha máxima de cada divisa que le paso.
Código:
2010216
No sé si podría hacer que me devolviera el día y mes en un 0 delante si es de un digito.
Saludos.
  #5 (permalink)  
Antiguo 28/06/2010, 03:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ayuda con consulta

Cita:
Lo ideal seria tener el campo tal y como lo dices pero es una adaptación para una aplicación antigua y cada campo (año, mes y día) está en una variable de tipo entero.
Eso lo hubieses podido resover usando las funciones de YEAR(), MONTH() y DAY(), y manejar el problema de la aplicación por medio de las consultas y no forzar el modelo de datos.
Eventualmente, si se llega a reemplazar la aplicación el modelo de la base resultará ineficiente (ya lo es al tener los datos de esa forma).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 28/06/2010, 04:17
 
Fecha de Ingreso: julio-2009
Mensajes: 46
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Ayuda con consulta

Cita:
Iniciado por PepitoVadeCurt Ver Mensaje
Gracias por responder. Lo ideal seria tener el campo tal y como lo dices pero es una adaptación para una aplicación antigua y cada campo (año, mes y día) está en una variable de tipo entero.
He hecho la consulta pero tengo el problema que los meses y años que son de 1 digito, los pone como debe, con 1 digito.
Código:
SELECT max(concat(concat(año,mes),dia)) FROM divisas where
codigo='USD'
Me devuelve la fecha máxima de cada divisa que le paso.
Código:
2010216
No sé si podría hacer que me devolviera el día y mes en un 0 delante si es de un digito.
Saludos.
Solucionado, posteo la consulta por si a alguien le sirve.
Código:
SELECT max(concat(concat(año,digits(mes)),digits(dia))) FROM divisas where
codigo='USD'
Con la función digits, muestra el cero de delante.
gnzsoloyo tienes toda la razón pero hay que adaptarse a lo que hay. Mi trabajo no es modificar la tabla, sinó generar un informe con los datos de ella.
Saludos.

Etiquetas: bases-de-datos
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 11:12.