2017-09-14 1 views
0

J'ai ces données dans la table MySQL. J'ai besoin des résultats de la commande par condition:MySQL - ordre par deux colonnes avec condition

  • si effective_to est NULL, à montrent d'abord et order by effective_from DESC
  • si effective_to est NOT NULL, order by effective_to DESC

mes données

name   effective_from  effective_to 
person 01  1999-04-01   1999-05-31 
person 02  1999-04-01   2000-07-06 
person 03  1999-04-01   2000-09-25 
person 04  1999-04-01   2000-09-25 
person 07  1999-04-01   2000-09-25 
person 05  2013-04-29   NULL 
person 08  2010-06-17   2012-09-27 
person 09  2010-12-02   2012-09-27 
person 10  2017-02-10   NULL 
person 11  2017-02-10   NULL 
person 12  1999-04-01   2000-07-06 
person 13  2011-04-28   2015-10-06 
person 05  2013-04-29   2017-02-15 
person 06  2015-09-22   2017-02-15 
person 06  2015-09-22   2017-02-10 

I besoin de cet ordre de résultats

name    effective_from effective_to             
person 11  2017-02-10   NULL 
person 10  2017-02-10   NULL 
person 05  2013-04-29   NULL 
person 06  2015-09-22   2017-02-15 
person 05  2013-04-29   2017-02-15 
person 06  2015-09-22   2017-02-10 
person 13  2011-04-28   2015-10-06 
person 09  2010-12-02   2012-09-27 
person 08  2010-06-17   2012-09-27 
person 07  1999-04-01   2000-09-25 
person 03  1999-04-01   2000-09-25 
person 04  1999-04-01   2000-09-25 
person 12  1999-04-01   2000-07-06 
person 02  1999-04-01   2000-07-06 
person 01  1999-04-01   1999-05-31 

Comment je fais ça?

+0

Utilisez un 'UNION' de deux requêtes qui sélectionnent différents' effective_to', et chaque utilisation souhaité 'ORDER BY'. – Barmar

+2

SO n'est pas un service de codage gratuit. Vous devez essayer de résoudre le problème vous-même. Si vous ne pouvez pas le faire fonctionner, postez ce que vous avez essayé et nous vous aiderons à le réparer. – Barmar

Répondre

1

(Publié au nom de l'OP).

-je résoudre mon problème comme ceci:

ORDER BY `effective_to` IS NOT NULL ASC, `effective_to` DESC, 
    `effective_to` IS NULL, `effective_from` DESC; 
1

Cela devrait le faire

... 
ORDER BY 
ISNULL(effective_from) DESC, 
IF(ISNULL(effective_to) = 1, effective_from , effective_to) DESC