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

[SOLUCIONADO] order by de dos campos date en una sola tabla.

Estas en el tema de order by de dos campos date en una sola tabla. en el foro de Mysql en Foros del Web. hola a todos, tengo un problema con un order by de una query, en una misma tabla hay dos campos con fechas, la fecha_inicio es ...
  #1 (permalink)  
Antiguo 22/10/2017, 04:32
 
Fecha de Ingreso: enero-2011
Mensajes: 24
Antigüedad: 13 años, 3 meses
Puntos: 0
order by de dos campos date en una sola tabla.

hola a todos, tengo un problema con un order by de una query, en una misma tabla hay dos campos con fechas, la fecha_inicio es insertada al momento del insert de la linea, mientras que el campo fecha_programada es una campo no obligatorio y acepta NULL

la select en este ejemplo es id, fecha_inicio, fecha_programada

query:

Código MySQL:
Ver original
  1. SELECT c.id id, c.data_inizio fecha_inicio, c.data_pianificata fecha_programada
  2. FROM consegna c, tipo_servizio ts, area_servizio ars, tipo_consegna tc, stato_consegna sc, turnista t, consegna_letta cl
  3. WHERE c.id_tipo_servizio = ts.id and ts.id_area_servizio = ars.id
  4. and c.id_turnista = t.id
  5. and c.id_stato_consegna = sc.id
  6. and c.id_tipo_consegna = tc.id
  7. and c.id = cl.id_consegna
  8. and cl.id_turnista_conferma = 1
  9. and c.id_stato_consegna in (1,2)
  10. and tc.id = 1
  11. order by fecha_programada asc, fecha_inicio desc;

el resultado es:

Código:
id	fecha_inicio	fecha_programada
471	21/10/2017	NULL
474	20/10/2017	NULL
462	19/10/2017	NULL
464	18/10/2017	NULL
465	17/10/2017	NULL
448	16/10/2017	17/10/2017
444	16/10/2017	18/10/2017
401	13/10/2017	19/10/2017
455	19/10/2017	20/10/2017
454	19/10/2017	21/10/2017
lo que me serviria es que los records de fecha_programada esten siempre en la parte superior y ordenados por fecha_programada ascendiente.

he provado con order by fecha_programada desc, fecha_inicio desc; pero asi los veo fecha_programada en manera descendiente

Código:
id	fecha_inicio	fecha_programada
454	19/10/2017	21/10/2017
455	19/10/2017	20/10/2017
401	13/10/2017	19/10/2017
444	16/10/2017	18/10/2017
448	16/10/2017	17/10/2017
471	21/10/2017	NULL
474	20/10/2017	NULL
462	19/10/2017	NULL
464	18/10/2017	NULL
465	17/10/2017	NULL
y lo que me serviria seria que los records valorizados en la fecha_programada esten en alto y ordenados en manera ascendiente.

que quede asi:

Código:
id	fecha_inicio	fecha_programada
448	16/10/2017	17/10/2017
444	16/10/2017	18/10/2017
401	13/10/2017	19/10/2017
455	19/10/2017	20/10/2017
454	19/10/2017	21/10/2017
471	21/10/2017	NULL
474	20/10/2017	NULL
462	19/10/2017	NULL
464	18/10/2017	NULL
465	17/10/2017	NULL
alguna sugerencia por favor.

muchas gracias, anticipadas.

salu2.
  #2 (permalink)  
Antiguo 22/10/2017, 19:42
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: order by de dos campos date en una sola tabla.

Saludo

Pues podría ser manejar el mismo query pero
con una variación y es agregar este and en cada uno

Código SQL:
Ver original
  1. AND c.data_pianificata IS NOT NULL


Código HTML:
Ver original
  1. 448    16/10/2017    17/10/2017
  2. 444    16/10/2017    18/10/2017
  3. 401    13/10/2017    19/10/2017
  4. 455    19/10/2017    20/10/2017
  5. 454    19/10/2017    21/10/2017

Código SQL:
Ver original
  1. AND c.data_pianificata IS NULL

Código HTML:
Ver original
  1. 471    21/10/2017    NULL
  2. 474    20/10/2017    NULL
  3. 462    19/10/2017    NULL
  4. 464    18/10/2017    NULL
  5. 465    17/10/2017    NULL

Si se usara el UNION se volvería al punto de partida.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 22/10/2017, 21:52
 
Fecha de Ingreso: enero-2011
Mensajes: 24
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: order by de dos campos date en una sola tabla.

gracias por la respuesta, he intentado con IS NULL y IS NO NULL en el c.data_pianificata y con el UNION pero solo me muestra los records en base a c.data_pianificata es decir el resto de records no los visualiza.

la table tiene otros campos y los q deseo son los id, data_inizio, data_pianificata, si ejecuto el select individualmente es decir una query con solo id, data_inizio y otra query con id, data_pianificata los resultados son correctos, pero el UNION no respeta el orden q deseo.

provare con un join inner left o un inner outrec pero mi problema es q es una sola table con esos campos fecha...

gracias nuevamente

salu2
  #4 (permalink)  
Antiguo 23/10/2017, 06:00
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, 4 meses
Puntos: 2658
Respuesta: order by de dos campos date en una sola tabla.

Probemos:

Código SQL:
Ver original
  1. SELECT c.id id,
  2.          c.data_inizio fecha_inicio,
  3.          c.data_pianificata fecha_programada
  4.     FROM consegna c,
  5.          tipo_servizio ts,
  6.          area_servizio ars,
  7.          tipo_consegna tc,
  8.          stato_consegna sc,
  9.          turnista t,
  10.          consegna_letta cl
  11.    WHERE     c.id_tipo_servizio = ts.id
  12.          AND ts.id_area_servizio = ars.id
  13.          AND c.id_turnista = t.id
  14.          AND c.id_stato_consegna = sc.id
  15.          AND c.id_tipo_consegna = tc.id
  16.          AND c.id = cl.id_consegna
  17.          AND cl.id_turnista_conferma = 1
  18.          AND c.id_stato_consegna IN (1, 2)
  19.          AND tc.id = 1
  20. ORDER BY (fecha_programada IS NULL) DESC, fecha_programada  ASC, fecha_inicio DESC;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 24/10/2017, 21:40
 
Fecha de Ingreso: enero-2011
Mensajes: 24
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: order by de dos campos date en una sola tabla.

muchas gracias gnzsoloyo, el error fue que en las pruebas use el IS NULL en el where y obviamente no devolvia los records correctos, no se me ocurrio usar el IS NULL en el order by, serà una cosa mas que no se me olvidara desde ahora, muchas gracias, el resultado quedo como lo necesitaba con:

Código MySQL:
Ver original
  1. ORDER BY (fecha_programada IS NULL) ASC, fecha_programada  ASC, fecha_inicio DESC;

muchas gracias nuevamente.

salud2.
  #6 (permalink)  
Antiguo 25/10/2017, 06:19
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, 4 meses
Puntos: 2658
Respuesta: order by de dos campos date en una sola 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)

Etiquetas: campo, campos, date, ip, order, ram
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 17:32.