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

Ordenar por fecha futura ascendente y fecha pasada descendente

Estas en el tema de Ordenar por fecha futura ascendente y fecha pasada descendente en el foro de Mysql en Foros del Web. Hola chic@s, quiero ordenar una consulta de fechas futuras en ascendencia y de fechas pasadas en descendencia. Un ejemplo gráfico del resultado que deseo: 20/02/2013 ...
  #1 (permalink)  
Antiguo 20/02/2013, 12:07
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 3 meses
Puntos: 4
Ordenar por fecha futura ascendente y fecha pasada descendente

Hola chic@s,

quiero ordenar una consulta de fechas futuras en ascendencia y de fechas pasadas en descendencia. Un ejemplo gráfico del resultado que deseo:

20/02/2013 //Hoy
21/02/2013
02/03/2013
19/02/2013 //Ayer
17/01/2013
21/12/2013

Ejecuto la siguiente consulta pero no me da el resultado esperado, lo ordena prioritariamente de más antiguas a futuras:
Código PHP:
SELECT fecha_inicio
FROM eventos
ORDER BY
    
(CASE WHEN fecha_inicio CURDATE()
              
THEN 1
              
ELSE 0
     END
DESC,
fecha_inicio ASC 
Un saludo y gracias de antemano.
  #2 (permalink)  
Antiguo 20/02/2013, 12:42
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Ordenar por fecha futura ascendente y fecha pasada descendente

Hola erxaca:

Entiendo la idea de lo que intentas hacer, con el CASE-WHEN te estaría colocando primeramente todos los registros con fecha posterior a la actual, pero el detalle está en que al ordenar por el segundo campo lo hace de manera completa, es decir, no puedes indicarle a una ordenación que ordene primero unos registros de cierta manera y el resto de otra manera... Lo único que se me ocurre es que hagas algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+------------+
  3. | id   | fecha      |
  4. +------+------------+
  5. |    1 | 2013-12-21 |
  6. |    2 | 2013-02-21 |
  7. |    3 | 2013-02-20 |
  8. |    4 | 2013-03-02 |
  9. |    5 | 2013-01-17 |
  10. |    6 | 2013-02-19 |
  11. +------+------------+
  12. 6 rows in set (0.00 sec)
  13.  
  14. mysql> SELECT * FROM (
  15.     ->   SELECT 0 temp, fecha
  16.     ->   FROM tabla
  17.     ->   WHERE fecha >= CURDATE()
  18.     ->   ORDER BY fecha
  19.     -> ) T1
  20.     -> UNION ALL
  21.     -> SELECT * FROM (
  22.     ->   SELECT 1 temp, fecha
  23.     ->   FROM tabla
  24.     ->   WHERE fecha < CURDATE()
  25.     ->   ORDER BY fecha DESC
  26.     -> ) T2;
  27. +------+------------+
  28. | temp | fecha      |
  29. +------+------------+
  30. |    0 | 2013-02-20 |
  31. |    0 | 2013-02-21 |
  32. |    0 | 2013-03-02 |
  33. |    0 | 2013-12-21 |
  34. |    1 | 2013-02-19 |
  35. |    1 | 2013-01-17 |
  36. +------+------------+
  37. 6 rows in set (0.00 sec)

tengo dudas con respecto a la fecha (21/12/2013), creo que te equivocaste al hacer tu ordenación, porque esta fecha, según yo debería ser la última de la primer sección...el campo temp con los valores de 0 y 1 en realidad están de más, los puse para que lo asociaras con lo que estás intentando hacer... observa que de esta manera sí puedes indicar en el ORDER BY dos comportamientos distintos para casa sección:

Código:
ORDER BY fecha --> de manera ascendente para la primer sección

ORDER BY fecha DESC --> de manera descendente para la segunda sección
Dale un vistazo para ver si te puede servir.

Saludos
Leo.
  #3 (permalink)  
Antiguo 20/02/2013, 13:33
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Ordenar por fecha futura ascendente y fecha pasada descendente

Muchas gracias leonardo_josue, funciona a la perfección. Y he entendido mi error de querer ordenar el mismo campo por dos veces

Cita:
tengo dudas con respecto a la fecha (21/12/2013), creo que te equivocaste al hacer tu ordenación, porque esta fecha, según yo debería ser la última de la primer sección
Exacto, quería decir 21/12/2012.

Un saludo

Etiquetas: fecha, select
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 00:28.