Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/07/2011, 11h34   #1
Invité de passage
 
Homme
Inscription : juillet 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : juillet 2011
Messages : 2
Points : 1
Points : 1
Par défaut Trier sur deux champs date

Bonjour,

Je suis actuellement sur un projet avec une base de données MySQL 5.X.

J'ai une table avec deux champs date (un des deux champs est potentiellement null) et je voudrai la ligne ayant la date la plus ancienne (les deux colonne confondue) où, de plus, la valeur null n'est pas prise en compte.

Je ne sais pas si je suis clair donc un exemple sera plus parlant :

LIV_DATE_FIN_INI LIV_DATE_FIN_REPLANIFIEE
30/09/2009 00:00:00 31/05/2011 00:00:00
30/08/2008 00:00:00 31/05/2011 00:00:00
30/09/2009 00:00:00 31/02/2008 00:00:00
31/12/2010 00:00:00 {null}
31/12/2010 00:00:00 {null}

Je veux donc la ligne avec la date la plus petite, ici la troisième ligne car c'est celle qui à la date la plus ancienne.

Merci par avance de vos réponses.
FloXIV est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 11h46   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 019
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 019
Points : 18 304
Points : 18 304
Envoyer un message via MSN à CinePhil
Tu peux essayer cette requête :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SELECT les_colonnes_souhaitees
FROM la_table t1
WHERE LIV_DATE_FIN_INI = 
    SELECT MIN(date_liv)
    FROM
    (
        SELECT LIV_DATE_FIN_INI AS date_liv
        FROM la_table
        UNION 
        SELECT LIV_DATE_FIN_REPLANIFIEE
        FROM la_table
        WHERE LIV_DATE_FIN_REPLANIFIEE IS NOT NULL
    ) tmp
    OR LIV_DATE_FIN_REPLANIFIEE = 
    SELECT MIN(date_liv)
    FROM
    (
        SELECT LIV_DATE_FIN_INI AS date_liv
        FROM la_table
        UNION 
        SELECT LIV_DATE_FIN_REPLANIFIEE
        FROM la_table
        WHERE LIV_DATE_FIN_REPLANIFIEE IS NOT NULL
    ) tmp
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 12h34   #3
Invité de passage
 
Homme
Inscription : juillet 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : juillet 2011
Messages : 2
Points : 1
Points : 1
Merci de ta réponse rapide. J'utilise Toad For MySQL et il me donne une erreur de syntaxe pas explicite du tout.

Code :
1
2
3
4
5
MySQL DATABASE Error: You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near 'SELECT min(date_liv)
    FROM
    (
        SELECT LIV_DATE_FIN_INI AS date_liv
' at line 7
J'ai essayé la requête imbriquée indépendamment et elle fonctionne sans problème. Mais je n'arrive pas à trouver pourquoi cette erreur. Une idée ?

Voici la requete complète :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
SELECT liv.LIV_ID, liv.LIV_DATE_FIN_INI, liv.LIV_DATE_FIN_REPLANIFIEE
FROM livrable liv 
INNER JOIN phase pha ON pha.PHA_ID = liv.PHA_ID
INNER JOIN proposition_commerciale pcm ON pcm.PCM_ID = pha.PCM_ID
INNER JOIN cahier_des_charges cdc ON cdc.CDC_ID = pcm.CDC_ID
WHERE liv.LIV_DATE_FIN_INI = 
    SELECT min(date_liv)
    FROM
    (
        SELECT LIV_DATE_FIN_INI AS date_liv
        FROM livrable
        UNION 
        SELECT LIV_DATE_FIN_REPLANIFIEE
        FROM livrable
        WHERE LIV_DATE_FIN_REPLANIFIEE IS NOT NULL
    ) tmp
 		OR liv.LIV_DATE_FIN_REPLANIFIEE = 
    SELECT min(date_liv)
    FROM
    (
        SELECT LIV_DATE_FIN_INI AS date_liv
        FROM livrable
        UNION 
        SELECT LIV_DATE_FIN_REPLANIFIEE
        FROM livrable
        WHERE LIV_DATE_FIN_REPLANIFIEE IS NOT NULL
    ) tmp


Edit :
Autant pour moi il manquait juste des parenthèses !!

Merci pour cette requête elle à l'air de fonctionner. Je fais encore quelques tests dessus et je clos le sujet.
FloXIV est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h07.


 
 
 
 
Partenaires

Hébergement Web