IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Double condition sur une date


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Double condition sur une date
    Bonjour,

    Je souhaite récupérer dans une table des enregistrements aves une double condition sur un champ date:
    1 : Tous les enregistrements avec une date supérieure à une date donnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT DISTINCT Champ1, Champ2, Date
    	FROM TABLE
    	WHERE Date>#5/1/2005#
    	ORDER BY Champ1, Champ2;
    2 : Les lignes des couples Champ1/Champ2 avec la date la plus récente avant une date donnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Champ1, Champ2, Max(Date) AS MaxDateAppli
    	FROM TABLE
    	WHERE Date<#5/1/2005#
    	GROUP BY Champ1, Champ2
    	ORDER BY Champ1, Champ2;
    Je coince pour réunir les deux requètes en une seule.
    Quelqu'un peut-il m'aider ?

    D'avance merci

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Je suis presque certain de n'avoir pas compris ce que tu veux dire, mais si je prend le verbe "réunir" au premier degré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      SELECT DISTINCT Champ1, Champ2, Date
      FROM TABLE
      WHERE Date>#5/1/2005#
    UNION
      SELECT Champ1, Champ2, Max(Date) 
      FROM TABLE
      WHERE Date<#5/1/2005#
      GROUP BY Champ1, Champ2
    ORDER BY Champ1, Champ2;

  3. #3
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    Salut, je comprends pas trop ce que tu veux obtenir. Car si je lis ce que tu met, en regroupant les deux requêtes tu n'obtiendra rien. Vu que dans la première ta date sera supérieur à 5/1/2005 et dans elle sera inférieur. Peux-tu être plus précis ?

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Je rejoins griese...

    ensuite ta requête, c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Champ1, Champ2, Max(Date) AS MaxDateAppli
    	FROM TABLE
    	WHERE Date<#5/1/2005#
    	GROUP BY Champ1, Champ2
            HAVING MaxDateAppli > #5/1/2005#
    	ORDER BY Champ1, Champ2;
    mais si tu mets deux fois la même date, tu va avoir un nombre de résultat = 0

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    La date sur laquelle je veux mettre les conditions est une date à partir de laquelle des données sont valides.
    Pour avoir toutes les données valides à partir depuis le 01/05/2005, il faut donc que je récupère tous les enregistrements :
    * pour lesquels la date de validité est supérieure au 01/05/2005
    * qui était valables au 01/05/2005 donc (date de validité inférieure et la plus proche)

    Suis-je plus clair ?

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par Olivier95
    * pour lesquels la date de validité est supérieure au 01/05/2005
    * qui était valables au 01/05/2005 donc (date de validité inférieure et la plus proche)
    ???

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Un petit exemple sera peut-être plus parlant.

    Ma table est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    id	Champ1	Champ2	Date
    1	X65	C65	01/04/2005
    2	X70	F70	01/01/2005
    3	X70	J70	01/01/2005
    4	X73	B73	01/01/2005
    5	X73	B73	01/04/2005
    6	X73	B73	01/10/2005
    7	X74	B74	01/04/2005
    8	X74	K74	01/01/2005
    9	X74	K74	01/04/2005
    10	X74	K74	01/10/2005
    11	X74	K74	28/02/2005
    12	X77	J77	20/04/2006
    13	X81	J81	01/01/2005
    14	X81	J81	01/04/2005
    15	X81	J81	01/10/2005
    16	X84	B84	01/01/2005
    17	X84	C84	01/01/2005
    Je veux récupérer les champs avec l'id :
    * 6,10,11,12,15 (date supérieure au 01/05/2005)
    * 1,2,3,7,16,17 (date la plus récente avant le 01/05/2005 pour un couple Champ1/Champ2 donné)

  8. #8
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    OK... donc en fait, tu veux les dates > 01/05/2005
    et sinon la date la plus proche...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    (SELECT DISTINCT T.Champ1, T.Champ2, T.Date
      FROM TABLE T
      WHERE T.Date>#5/1/2005#)
    UNION
      (SELECT T1.Champ1, T1.Champ2, Max(T1.Date) 
      FROM TABLE T1
      GROUP BY T1.Champ1, T1.Champ2
      HAVING NOT EXISTS(
         SELECT T2.Champ1, T2.Champ2, T2.Date
         FROM TABLE T2
        WHERE T2.Date>#5/1/2005# AND T2.Champ1 = T1.Champ1 AND T2.Champ2 = T1.Champ2 ))
    ORDER BY Champ1, Champ2;

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Super, ça marche !
    Merci (je ne connaissais pas le UNION)

  10. #10
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    sur mon espace web (dans ma signature), tu as un lien vers le tuto de SQLpro : SQL de A à Z (j'ai plus l'url exacte en tête)

    lis-le ou au moins ai-le sous le code (coude pardon ^^), il est super instructif

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requete avec condition sur une date
    Par Romain0 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 23/02/2012, 10h49
  2. [WD14] Condition sur une date
    Par Bobsucre dans le forum WinDev
    Réponses: 8
    Dernier message: 06/06/2010, 01h03
  3. [5.1] Condition sur une date : date + 12 mois
    Par oli43 dans le forum Débuter
    Réponses: 3
    Dernier message: 30/08/2008, 13h41
  4. Condition sur une date
    Par DanaX dans le forum iReport
    Réponses: 12
    Dernier message: 19/08/2008, 11h43
  5. [SQL] Conditions sur une date dans une requete
    Par poufouille dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/03/2004, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo