SQL - Comparando fechas...

   
Vista:

Comparando fechas...

Publicado por TRASMASTER (1 intervención) el 19/07/2010 16:42:58
Tengo una tabla creada en mi hosting phpMyAdmin llamada: programacion_de_actuaciones tiene un campo date, quiero hacer un query que filtre solo las 4 proximas tareas programadas a la fecha actual, es decir:

Si hoy es dia 19/07 y en la tabla aparecen campos con la fecha de hoy (19/07)quiero que los muestre (puede ser uno o varios para la misma fecha)y los correspondientes a las dias siguientes al 19/07, solo quiero que muestre 4 resultados...ahora aqui mi problema puede ser que solo haya dos actos posteriores al dia actual, entonces querria que mostrase, los 2 anteriores a la fecha y los dos posteriores, en pantalla siempre tiene que haber 4 resultados y eses tienen que ser los mas proximos a la fecha actual.

Mediante php meto en una variable la fecha_actual bien, ahora puedo hacer un query comparando esta fecha con las fechas de la tabla y filtrar las que sean iguales o superiores, guardar en una varible el numero de filas del resultado para saber cuantos resultados obtuve y asi poder saber si hay mas de 4 o menos....hasta aqui creo que lo se hacer, lo logico ahora seria hacer otro query comparando las fechas y buscando justo las dos anteriores a la fecha_actual, no se bien como se hace este tipo de comporaciones pero eso no creo que me resulte muy complicado (eso espero, si alguien me lo explica seria ya....como el gol de iniesta je..)y tampoco se si este metodo es el mejor y mas rapido, creo que debe haber alguna manera de hacerlo todo en una consulta y que se mas facil.

Gracias!! saludos!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Comparando fechas...

Publicado por Leonardo Josue (877 intervenciones) el 20/07/2010 23:03:13
Buenas tardes Trasmaster, en tu post olvidaste mencionar qué manejador de bd estás utilizando, primero veamos si entendí bien qué es lo que necesitas:

Supongamos que tu tabla tiene más o menos la siguiente información:

id_tarea|fecha
1|01/01/2010
2|02/01/2010
3|03/01/2010
4|05/01/2010
5|05/01/2010
6|05/01/2010
7|05/01/2010
8|06/01/2010
9|06/01/2010
10|06/01/2010

Si quieres obtener las taréas más cercanas al día 04/01/2010 entonces deberías obtener los registros 4,5,6 y 7, que son los inmediatos posteriores a la fecha seleccionada.

Si quieres consultar para el día 05/01/2010 entonces deberá regresar los registros 8,9 y 10 que son posteriores a la fecha y un registro con fecha del 05 para completar los 4 registros correcto???

Creo que puedes hacerlo de la siguiente manera, el ejemplo es válido para SQL Server, si utilizas algún otro manejador, pues es cuestión que busques la equivalencia.

select top 4 id_tarea, fecha from
(
select top 4 id_tarea, fecha as fecha from Tabla_Tareas
where convert(datetime, convert(varchar, fecha, 103), 103) > convert(datetime, '04/01/2010', 103)
order by fecha, id_tarea
union
select top 4 id_tarea, fecha as fecha from Tabla_Tareas
where convert(datetime, convert(varchar, fecha, 103), 103) <= convert(datetime, '04/01/2010', 103)
order by fecha desc, id_tarea
) a
order by fecha desc, id_tarea

Saludos y espero tus comentarios.
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparando fechas...

Publicado por Igor (1 intervención) el 23/08/2014 00:57:49
Y en el caso que quisiera que se fuera recorriendo las fechas en el caso de una vista, por ejemplo:

Que siempre me muestre los registros de los últimos 15 días independiente de que día sea o la cantidad de registros que haya, es posible?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar