Sujet : [SQL] Probl?me pour mise en ordre

J'espère être suffisamment clair, je maîtrise mal le sql et dérivé...

J'ai une requête qui fait la liste de documents.
Dans la table des documents, il y a 2 colonnes distinctes pour la date : la première correspond à la date de mise à jour de l'original, la seconde à la date de traduction, pleine si le document est une traduction, vide sinon.

Exemple:
DocId | Date | Date de Trad | Titre
1 | 10/01/94 | | Biographie de Imax
2 | 10/01/94 | 01/01/07 | Biography of Imax
3 | 02/05/94 | | Biographie de jean

Imaginons que je veuille que ma liste affiche les documents dans toutes les langues, et que l'ordre soit celui de la date la plus récente, qu'il s'agisse de "Date" ou de "Date de Trad".

En gros il faut que ma requête dise : liste de la table document ; avec DocId, Date, Date de Trad et Titre ; ordre : (Date ou Date de Trad) la plus récente en premier.
Ce qui me donnerait :
2 | 10/01/94 | 01/01/07 | Biography of Imax
3 | 02/05/94 | | Biographie de jean
1 | 10/01/94 | | Biographie de Imax


C'est possible en sql de faire ça ?

"World goin' one way, people another" Poot

Re : [SQL] Probl?me pour mise en ordre

Je ne pense pas qu'une requête dans ce genre puisse fonctionner directement. Tu peux faire des tris sur une colonne, puis éventuellement sur une deuxième (en cas d'égalité sur la première colonne) avec une requête dans le genre:

Select DocId, Date, DateTrad, Titre
From maTable
Order by DateTrad DESC, Date DESC;

/* Les résultats sont triés selon la date de traduction puis selon la date de mise à jour de l'original.  */

Pour pouvoir faire un tri sur soit la valeur de DateTrad, soit la valeur de Date, je pense que le meilleure solution est de commencer par créer une vue qui reprend l'ensemble des informations de ta table plus une colonne supplémentaire qui contiendra la date max. Ensuite il suffira d'afficher le contenu de la vue en utilisant la dernière colonne pour trier.

Create view maVue AS
Select DocId, Date, DateTrad, Titre, Greatest(Date,DateTrad) as dateMax
From maTable ;


Select DocId, Date, DateTrad, Titre
From maVue 
Order by dateMax DESC;

3 Dernière modification par Seldaek (25-01-2007 13:24:23)

Re : [SQL] Probl?me pour mise en ordre

Avec Date/Datetrad en champ de type TIMESTAMP:

SELECT * FROM `test` ORDER BY IF(datetrad=0, date, datetrad)

le résultat:

val1    2007-01-25 12:13:38    0000-00-00 00:00:00
val3    2007-01-25 12:14:24    2007-01-25 12:15:00
val2    2007-01-25 12:14:04    2007-01-25 12:15:04
val4    2007-01-25 12:16:08    0000-00-00 00:00:00

Edit: Ajoute un DESC à la fin pour inverser l'ordre si tu veux les avoir dans l'autre ordre..

4

Re : [SQL] Probl?me pour mise en ordre

On ne peut pas directement faire ça ?

Select DocId, Date, DateTrad, Titre, Greatest(Date,DateTrad) as dateMax
From maTable 
Order by dateMax DESC;
"World goin' one way, people another" Poot

Re : [SQL] Probl?me pour mise en ordre

Non on peut pas, mais ma solution devrait convenir.

Sinon le "AS" il est inutile de nos jours, "machin alias" marche très bien sans AS entre, enfin c'est un détail pour fénéants.

6

Re : [SQL] Probl?me pour mise en ordre

Et j'imagine que je suis obligé de convertir mes dates en timestamp ?

"World goin' one way, people another" Poot

Re : [SQL] Probl?me pour mise en ordre

Pas forcément, c'est sous quel format là ?

8

Re : [SQL] Probl?me pour mise en ordre

DD/MM/YYYY

Mais laisse tomber ta solution marche avec quelques modifications :
- c'est pas une "vraie" base sql mais une base access, j'utilise donc IIF
- plutôt que "datetrad=0" j'utilise la fonction isnull

Merci beaucoup pour le coup de main.

"World goin' one way, people another" Poot

Re : [SQL] Probl?me pour mise en ordre

Ca roule, en effet le but c'était juste de checker si c'était vide, le timestamp c'est pas obligé, mais pratique quand même pour les dates (gestion décalage horaire).

Re : [SQL] Probl?me pour mise en ordre

Les bases de données ça rend impuissant.

Mais en vrai je m'en fous complètement