SQL - ¿Cómo ordenar registros por fecha y subordenar por fechas porteriores a la actual?

 
Vista:

¿Cómo ordenar registros por fecha y subordenar por fechas porteriores a la actual?

Publicado por Diego (2 intervenciones) el 21/12/2015 13:20:06
Hola no sé si estará resuleto ya por ahí, yo no he encontrado solución.
Mi problema es que tengo una tabla con cursos y fechas de realización. Quiero que aparezcan ordenados por el campo fecha, hasta aquí lo hago con un simple ORDER BY fecha_inicio ASC.
El problema es que cuando esa fecha_inicio sea anterior a la actual, el curso ha caducado, quiero que aparezca al final como próximo, en lugar de los primeros de la lista ya que la fecha es anterior a los que aun no se han realizado.
De forma que me muestre ordenados por fecha los cursos que aun no se han realizado y seguido todos los caducados.
Si alguien puede ayudarme, me estoy volviendo loco.
Muchas gracias.
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
sin imagen de perfil
Val: 109
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

¿Cómo ordenar registros por fecha y subordenar por fechas porteriores a la actual?

Publicado por Rafael (111 intervenciones) el 21/12/2015 14:08:10
No dices en que motor de Base de Datos trabajas....

Pero intentare ayudarte...
Partiendo de una tabla con datos asi:
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE Curso
	(`id` int, `curso` varchar(7), `fecha_inicio` datetime)
;
 
INSERT INTO Curso
	(`id`, `curso`, `fecha_inicio`)
VALUES
	(1, 'Curso_1', '2015-12-25'),
	(2, 'Curso_2', '2015-12-22'),
	(3, 'Curso_3', '2015-12-15'),
	(4, 'Curso_4', '2015-12-20'),
	(5, 'Curso_5', '2015-12-21')
;

Puedes formular una consulta de este tipo:
1
2
3
4
5
6
select id
     , curso
     , fecha_inicio
     , case when fecha_inicio < current_date() then 1 else 0 end tipo
from   curso
order  by 4 asc, fecha_inicio asc

Con lo cual obtendrias algo asi:
Imagen

El caso es que este ejemplo aplica para MySQL si usas un motor como Oracle en lugar de current_date() seria un sysdate, y en SQL server un GETDATE, vaya pero espero que el ejemplo te ayude.

Tambien podrias sustituir el "CERO" y "UNO" por vigente y caducado y ordenar descendente... mira
Imagen

Saludos

Pd. Si la información te sirve a mi me sirve un +1.
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

¿Cómo ordenar registros por fecha y subordenar por fechas porteriores a la actual?

Publicado por Diego (2 intervenciones) el 21/12/2015 15:44:40
Muchas gracias Rafael, pero poco antes de leer tu respuesta creo que he dado con algo similar a lo que has puesto o al menos también me funciona y hace la ordenación correctamente.
Se me ha ocurrido algo tal que así:

SELECT * FROM cursos WHERE (lo que sea) ORDER BY (fecha_inicio>".$fecha_actual.") DESC

Donde $fecha_actual = date("Ymd")

Un saludo y muchas gracias por tu rápida respuesta.
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