8
votes

Commander par plusieurs champs dans SQLite

J'ai une table simple, quelque chose comme: ID INT, date créée_at, date mise à jour_at . Je voudrais commander les lignes afin que toutes les lignes qui possèdent un mis à jour_at soient triés par cela, et tout ce qui ne sera pas trié par le créé_at . Le problème est que quelque chose comme: xxx

ne fonctionne pas. J'ai regardé des clauses de commande personnalisées, quelque chose comme: xxx

mais ne semble pas avoir quelque chose à travailler. Aide?

EDIT: J'aurais dû spécifier que je souhaite que les champs mises à jour doivent trier avant le fichier créé_at . Donc, si les données ressemblent à: xxx

je voudrais des résultats comme: xxx


1 commentaires

Mise à jour de ma réponse basée sur votre mise à jour.


3 Réponses :


19
votes

On dirait que vous recherchez: xxx

par The Docs , coalesce retourne

une copie du premier argument non nul. Si tous les arguments sont nuls, alors NULL est revenu. Il doit y avoir au moins 2 Arguments.

EDIT : Compte tenu de la modification de l'opération, il peut plutôt vouloir: xxx

ou astuces similaires pour la commande de la COSC; ou peut-être xxx

Il est impossible de dire exactement ce que l'OP veut d'un exemple célibataire et très particulier, mais une variante sur une partie de ces approches devrait résoudre son problème réel, quoi que ce soit Ce problème peut réellement être dans des détails spécifiques, précis et complets.


0 commentaires

3
votes

ifnull, voir ici

Dans ce cas, vous utiliseriez quelque chose comme:

ifnull (mise à jour_at, '1-janvier-2100'), créé_at

Toutes les colonnes sans champ mis à jour_at reçoivent l'ordre de tri par défaut et triera ensuite par Created_AT. La valeur du 1-janvier-2100 garantit qu'ils semblent enfin dans la liste. Changez ceci pour être 1900 si vous le souhaitez d'abord.


1 commentaires

Merci, c'était très utile, mais ce n'était pas tout à fait ce que je cherchais parce que je me suis mal formulé ma question mal. Édité.



0
votes

Je sais que cela ne répond pas à votre question exactement, mais c'est une solution alternative.

Si vous deviez définir le champ mises à jour sur le même que créé_at sur la création, vous aurez toujours une valeur pour mise à jour_at et pourrait Toujours juste trier par le champ mise à jour . Pour une quantité mineure de duplication, vous simplifiez votre code, votre vie et votre efficacité de vos requêtes SQL.


0 commentaires