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

Ordenar Select por campo Time

Estas en el tema de Ordenar Select por campo Time en el foro de Mysql en Foros del Web. Hola, tengo un problemita en una consulta. Necesito ordenarla por un campo tipo Time. Y no me doy cuenta como solucionarlo. Tengo 3 registros: 23:00:00 ...
  #1 (permalink)  
Antiguo 25/04/2013, 13:29
 
Fecha de Ingreso: noviembre-2004
Mensajes: 57
Antigüedad: 19 años, 5 meses
Puntos: 0
Ordenar Select por campo Time

Hola, tengo un problemita en una consulta. Necesito ordenarla por un campo tipo Time.
Y no me doy cuenta como solucionarlo.

Tengo 3 registros:
23:00:00
23:30:00
00:05:00

Si lo ordeno en forma ASC, espero que el resultado sea igual al listado, en cambio me devuelve:

00:05:00
23:00:00
23:30:00

agradezco su ayuda

saludos
  #2 (permalink)  
Antiguo 25/04/2013, 13:44
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Ordenar Select por campo Time

Hola Gorriak:

La ordenación es perfectamente normal... si tú ordenas de manera ascendente, pues las 00:05:00 van antes que las 23:00:00, y las 23:00:00 van antes que las 23:30:00, entonces ¿Donde está el problema?

Mucho ojo, si estás hablando que las 00:05:00 corresponden por ejemplo al siguiente día, pues ese sería otro caso, aquí solo estás considerando la hora y como te dije, la ordenación es perfectamente norma.

dime qué criterio debes considerar para poner los datos en el orden que colocas, igual y hay alguna forma de alterar la cláusula ORDER BY para adecuarla a tus necesidades.

Saludos
Leo.
  #3 (permalink)  
Antiguo 25/04/2013, 13:48
 
Fecha de Ingreso: noviembre-2004
Mensajes: 57
Antigüedad: 19 años, 5 meses
Puntos: 0
Respuesta: Ordenar Select por campo Time

Hola, gracias por la pronta respuesta. El tema que tengop que que por ejemplo si hablamos de turnos.
Tengo un turno que comienza a las 23:00, otro 23:30, otro a las doce de la noche y otro a la 1 de la mañana.
yo necesito que el SELECT me devuelva: 23:00, 23:30, 00:00, 01:00
  #4 (permalink)  
Antiguo 25/04/2013, 15:07
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Ordenar Select por campo Time

Hola Gorriak:

estamos de acuerdo que el orden no es un orden "natural" verdad??? por lo tanto tú tienes que forzar el ordenamiento que necesitas... si quieres que se presenten primero los registros que están entre las 23:00 y las 23:59:59 y en seguida los registros de las 00:00:00 en adelante, puedes hacerlo con una ordenación condicional, checa este script:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +----------+
  3. | tiempo   |
  4. +----------+
  5. | 23:00:00 |
  6. | 00:05:00 |
  7. | 23:30:00 |
  8. | 00:00:01 |
  9. | 22:29:59 |
  10. | 00:00:00 |
  11. | 23:59:59 |
  12. +----------+
  13. 7 rows in set (0.02 sec)
  14.  
  15. mysql> SELECT tiempo, IF(tiempo BETWEEN '23:00:00' AND '23:59:59', 1, 2) orden
  16.     -> FROM tabla
  17.     -> ORDER BY IF(tiempo BETWEEN '23:00:00' AND '23:59:59', 1, 2), tiempo;
  18. +----------+-------+
  19. | tiempo   | orden |
  20. +----------+-------+
  21. | 23:00:00 |     1 |
  22. | 23:30:00 |     1 |
  23. | 23:59:59 |     1 |
  24. | 00:00:00 |     2 |
  25. | 00:00:01 |     2 |
  26. | 00:05:00 |     2 |
  27. | 22:29:59 |     2 |
  28. +----------+-------+

Observa que lo que hace es asignar un 1 a todas las horas que están entre las 23:00:00 y las 23:59:59 y un 2 al resto... de tal manera que primero ordena por este criterio y en seguida por la hora correspondiente.

Saludos
Leo.

Etiquetas: campo, registros, select, time
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 10:23.