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 :

[Access] Max + 3 autres lignes suivantes


Sujet :

Langage SQL

  1. #1
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut [Access] Max + 3 autres lignes suivantes
    Je vais faire une requête qui affiche la plus grande valeur d'un champs donné plus trois autres lignes

    Exemple
    SI Max(Annee) = 2006
    Afficher (en ligne) 2006, 2007,2008,2009

    SGBD : ACCESS

  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
    Si Annee est unique dans la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT a.Annee
    FROM laTable a INNER JOIN laTable b
                           ON a.Annee <= b.Annee
    GROUP BY a.Annee
    HAVING COUNT(*) <= 4
    Sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT a.Annee
    FROM laTable a INNER JOIN laTable b
                           ON a.Annee <= b.Annee
    GROUP BY a.Annee
    HAVING COUNT(DISTINCT b.Annee) <= 4

  3. #3
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Annee n'est pas unique, la deuxième ne fonction pas (c'est peut-être du au SGBD)

    J'ai pris la première est faire de sorte à avoir une année unique en y insérant deux sous-requêtes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT a.Annee
    FROM (SELECT DISTINCT Annee FROM T_Periode)  a INNER JOIN 
    (SELECT DISTINCT Annee FROM T_Periode)  b
                           ON a.Annee <= b.Annee
    GROUP BY a.Annee
    HAVING COUNT(*) <= 4
    Je n'ai que deux lignes :

    2005
    2006

    alors que je cherche à avoir

    2006
    2007
    2008
    2009

  4. #4
    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
    Elles existent ces années dans la table ?

  5. #5
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Citation Envoyé par Médiat
    Elles existent ces années dans la table ?
    Non, il n'y a que 2006 et 2005 dans la table.

    Je veux la plus grande (2006) plus les 3 années qui la suivent (2007, 2008, 2009)

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 434
    Points
    28 434
    Par défaut
    Citation Envoyé par Bujuman
    Non, il n'y a que 2006 et 2005 dans la table.

    Je veux la plus grande (2006) plus les 3 années qui la suivent (2007, 2008, 2009)
    Comment veux-tu que ton SGBD te sorte des lignes qui ne sont pas dans les tables ?

    Le plus simple serait d'avoir une table Annees(Annee) contenant une liste d'années.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT  a.Annee
    FROM    annees  AS a
        INNER JOIN
            (   SELECT  MAX(t.annee)    AS annee_max
                FROM    MaTable AS t
            )   AS v 
    WHERE   a.annee BETWEEN v.annee_max AND v.annee_max + 3
    ;

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 434
    Points
    28 434
    Par défaut
    En y réfléchissant, tu as aussi une autre possibilité, mais pas très optimale à mon avis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        SELECT  MAX(annee)    
        FROM    MaTable
    UNION
        SELECT  MAX(annee)  + 1    
        FROM    MaTable
    UNION
        SELECT  MAX(annee)  + 2    
        FROM    MaTable
    UNION
        SELECT  MAX(annee)  + 3    
        FROM    MaTable
    ;

  8. #8
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Ben je n'écarte pas la possibilité de mettre une nouvelle table avec une centaine d'années dedans si ça reste la dernière solution

  9. #9
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Citation Envoyé par al1_24
    En y réfléchissant, tu as aussi une autre possibilité, mais pas très optimale à mon avis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        SELECT  MAX(annee)    
        FROM    MaTable
    UNION
        SELECT  MAX(annee)  + 1    
        FROM    MaTable
    UNION
        SELECT  MAX(annee)  + 2    
        FROM    MaTable
    UNION
        SELECT  MAX(annee)  + 3    
        FROM    MaTable
    ;
    C'était la première qui m'était venue dans la tête,
    C'est toujours prenable

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/08/2014, 13h54
  2. [XL-2002] Copier Ligne dans une autre Feuil Suivant Condition
    Par vaucluseimmo dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 17/12/2011, 16h31
  3. Réponses: 0
    Dernier message: 04/06/2008, 13h35
  4. VBA EXCEL - Sélection d'une ligne suivant saisie
    Par brethomeau dans le forum Macros et VBA Excel
    Réponses: 48
    Dernier message: 15/11/2005, 17h41
  5. Réponses: 12
    Dernier message: 11/11/2005, 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