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

se podria ordenar un consulta segun dos fechas

Estas en el tema de se podria ordenar un consulta segun dos fechas en el foro de Mysql en Foros del Web. Me explico quiero mostrar los registro de una tabla esta tabla tiene dos campos de fecha por ejemplo fecha1 fecha2, entonces mi pregunta es la ...
  #1 (permalink)  
Antiguo 24/03/2015, 07:04
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 8 meses
Puntos: 5
se podria ordenar un consulta segun dos fechas

Me explico quiero mostrar los registro de una tabla esta tabla tiene dos campos de fecha por ejemplo fecha1 fecha2, entonces mi pregunta es la siguiente.

puedo ordenar los registros primero con fecha1 mas alta seguido de fecha2 mas alta?

es decir todos los que contengan fecha1 que no sea null ordenarlos segun su fecha mas reciente y posteriormente ordenar los de la fecha2 que estos ultimos no pueden ser nulos.
  #2 (permalink)  
Antiguo 24/03/2015, 09:12
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: se podria ordenar un consulta segun dos fechas

te puedes explicar un poco mejor que necesitas???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 24/03/2015, 09:24
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: se podria ordenar un consulta segun dos fechas

Yo veo dos posibilidades para entender lo que dices:
1) Ordenar por fecha1, y donde se repita esa fecha entre registros, por fecha2.
2) Ordenar por fecha1, donde fecha2 es NULL, y por fecha2, donde fecha1 es NULL.

El primer caso es un ORDER BY común y corriente sobre dos campos.
El segundo es una consulta con UNIÓN ALL algo compleja. ..

¿Podrías mostrar un ejemplo de cómo quedarían los datos en el resultado?
Con eso puede quedar más claro.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 24/03/2015, 11:44
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 8 meses
Puntos: 5
Respuesta: se podria ordenar un consulta segun dos fechas

No me explico en la tabla esta la fecha1 que se puede ser null y la fecha2 que siempre contiene fecha, entonces será ordenar los registros donde los primeros serán los de la fecha1 siempre y cuando sea mayor o igual que la actual, esto yo lo hago con una consulta. La otra consulta que creo es ordenar los registros sobrantes osea con el condicional correspondiente con la fecha2 sin importar que sea mayor o menor que la actual.
Estas son dos consultas y quiero saber si se puede hacer en una?
Saludos
  #5 (permalink)  
Antiguo 24/03/2015, 11:55
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 8 meses
Puntos: 5
Respuesta: se podria ordenar un consulta segun dos fechas

Ejemplo
id
1
2
3
fecha1
null
2020
2000
null
fecha2
2000
2001
2002

2,3,1
Estos son los id ordenados como quiero
  #6 (permalink)  
Antiguo 24/03/2015, 12:45
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: se podria ordenar un consulta segun dos fechas

No se entiende.
Muestralo en forma de tabla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 24/03/2015, 14:43
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: se podria ordenar un consulta segun dos fechas

Hola primary:

Tratando de jugar al adivino, porque como menciona gnzsoloyo, la verdad es que no se entiende del todo tu problema, creo que lo que quieres hacer es algo así:

[HIGHLIGHT="MySQL"]
Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+--------+--------+
  3. | id   | fecha1 | fecha2 |
  4. +------+--------+--------+
  5. |    1 |   NULL |   2000 |
  6. |    2 |   2020 |   2001 |
  7. |    3 |   2000 |   2002 |
  8. +------+--------+--------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM tabla
  12.     -> ORDER BY
  13.     -> CASE WHEN fecha1 >= fecha2 THEN fecha1
  14.     ->                            ELSE fecha2
  15.     -> END DESC;
  16. +------+--------+--------+
  17. | id   | fecha1 | fecha2 |
  18. +------+--------+--------+
  19. |    2 |   2020 |   2001 |
  20. |    3 |   2000 |   2002 |
  21. |    1 |   NULL |   2000 |
  22. +------+--------+--------+
  23. 3 rows in set (0.00 sec)



Es decir, una condicion, si fecha1 es mayor que fecha2, entonces se ordena por fecha1, en caso contrario se ordena por fecha2.

Dale un vistazo a ver si es lo que necesitas.

Saludos
Leo.
  #8 (permalink)  
Antiguo 24/03/2015, 16:26
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 8 meses
Puntos: 5
Respuesta: se podria ordenar un consulta segun dos fechas

No yo quiero que me muestre los resultados dependiendo principalmente de la fecha1 si esta es mayor que la fecha actual pero no menor, si cumple esta condicion ordenar los resultados siguientes dependiendo de la fecha2 ordenarlos del la mas reciente a la mas antigua. Esto solo lo consigo hacer con dos consultas y recupando los datos con programacion ya ordenados, pero quiero saber si es mejor o se puede hacer de una sola consulta, no se si importa pero es una tabla con unos 70.000 registros.

Muestro ejemplo:

los registros de la tabla

Código MySQL:
Ver original
  1. mysql> select * from prueba;
  2.  +----+---------------------+---------------------+
  3.  | id | fecha1              | fecha2              |
  4.  +----+---------------------+---------------------+
  5.  |  1 | 2000-00-00 00:00:00 | 2015-03-17 05:20:00 |
  6.  |  2 | 2015-03-31 04:13:00 | 2015-03-01 00:00:00 |
  7.  |  3 | NULL                | 2015-03-23 07:00:00 |
  8.  |  4 | 2015-04-07 00:00:00 | 2014-08-24 00:00:00 |
  9.  +----+---------------------+---------------------+
  10.  4 rows in set (0.00 sec)

las dos consultas que realizo para ordenarlos:

aqui muestro los datos si la fecha 1 es mayor o igual que la fecha actual, estos son los que se tienen que ordenar primero.

Código MySQL:
Ver original
  1. mysql> select * from prueba where fecha1>=current_timestamp();
  2.  +----+---------------------+---------------------+
  3.  | id | fecha1              | fecha2              |
  4.  +----+---------------------+---------------------+
  5.  |  2 | 2015-03-31 04:13:00 | 2015-03-01 00:00:00 |
  6.  |  4 | 2015-04-07 00:00:00 | 2014-08-24 00:00:00 |
  7.  +----+---------------------+---------------------+
  8.  2 rows in set (0.00 sec)

y despues ordeno los de la fecha2 segun exceptuando los de la primera consulta para que no me los repita.

Código MySQL:
Ver original
  1. mysql> select * from prueba where (fecha1<current_timestamp() || fecha1 is null) order by fecha2;
  2. +----+---------------------+---------------------+
  3. | id | fecha1              | fecha2              |
  4. +----+---------------------+---------------------+
  5. |  1 | 2000-00-00 00:00:00 | 2015-03-17 05:20:00 |
  6. |  3 | NULL                | 2015-03-23 07:00:00 |
  7. +----+---------------------+---------------------+
  8. 2 rows in set (0.00 sec)

espero que ahora se entienda un poco mejor, gracias por vuestras respuestas.
saludos

Última edición por primary; 25/03/2015 a las 03:51
  #9 (permalink)  
Antiguo 25/03/2015, 03:52
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 8 meses
Puntos: 5
Respuesta: se podria ordenar un consulta segun dos fechas

solo me faltaria ponerle el descendiente para que me muestre los registros con el orden que quiero.

Etiquetas: campo, fecha, registro, 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 16:30.