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

Requêtes et SQL. Discussion :

SQL GROUP BY intervalle de date


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut SQL GROUP BY intervalle de date
    Hello tout le monde et merci de m'aider.


    Mon probleme est simple mais je n'y trouve pas de solution

    Dans ma table utilisateur, j'ai un champs date.

    Je voudrais savoir si il est possible, en une requete, de compter le nombre d'utilisateur qui sont né avant 1989, en 1989, en 1990 et apres 1990


    pour ce qui est de = 1989 et = 1990, je sais le faire, mais c'est le "avant" et "apres" qui me pose probleme)

    en effet, si j'utilise la condition group by date_naissance having date_naissance < 1989, la requete me retournera une ligne par année en dessous de 1989.

    ex:
    année Nombre de personne
    1982 3
    1984 5
    1988 2


    alors que moi je voudrais: <1989 10


    Merci pour votre aide

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 174
    Points : 178
    Points
    178
    Par défaut
    bonjour,

    enlève le group by si tu veux pas grouper par année !!

  3. #3
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonjour,

    Quel est le format de ton champ "Date de Naissance"? Au vu de ton exemple, il s'agit d'un texte, c'est ça?
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  4. #4
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par mout1234
    Bonjour,

    Quel est le format de ton champ "Date de Naissance"? Au vu de ton exemple, il s'agit d'un texte, c'est ça?

    oui,c'est du texte

  5. #5
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par alcabk
    bonjour,

    enlève le group by si tu veux pas grouper par année !!

    désolé, j'ai du mal m'exprimer.


    Je voudrais grouper par intevalle d'année en fait.

    Mon exemple n'était pas complet.


    Voici ce que je voudrais exactement:

    Compter le nombre d'utilisateur qui sont né avant 1989, en 1989, en 1990 et apres 1990


    Donc pas ceci :

    ex:
    année Nombre de personne
    1982 3
    1984 5
    1988 2
    1989 4
    1990 5
    1991 3
    1992 6
    1993 2


    mais ceci :

    <1989 10
    1989 4
    1990 5
    >1990 11

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 174
    Points : 178
    Points
    178
    Par défaut
    alors je crois qu'il faut que tu crées un nouveau champ avec comme possibilité : <1989 ; 1989 ; 1990 ; >1990 (que tu remplis automatiquement avec des requêtes mise à jour)

    puis tu fais ta requête sur celui-ci

  7. #7
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    QQ chose de ce genre devrait faire l'affaire (pas testé)

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT "<1889" as Periode, COUNT(*) as NB FROM MATABLE WHERE Date_Naissance <"1989"
    UNION ALL
    SELECT "1889" as Periode, COUNT(*) as NB FROM MATABLE WHERE Date_Naissance ="1989"
    UNION ALL
    SELECT "1890" as Periode, COUNT(*) as NB FROM MATABLE WHERE Date_Naissance ="1990"
    UNION ALL
    SELECT ">1890" as Periode, COUNT(*) as NB FROM MATABLE WHERE Date_Naissance >"1990"
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  8. #8
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par mout1234
    Pas trés logique mais bon soit!

    Donc si je comprends bien, ton champ contient un texte au format yyyy mm

    => si tu veux tout ce qui est antérieur à un mois donné (1989 10), logiquement tu devrais pouvoir faire
    date_naissance <"1989 10", à moins que ton mois ne soit pas codé systématiquement sur 2 chiffres.


    EDIT: oops... j'avais mal compris... Je reprends...
    Non, ce n'est pas logique, mais ce n'est pas moi qui ai créé la DB.

    Par contre, quand je dis 1989 10, c'était pour montrer le résultat d'un exemple:

    <1989 étant l'intervalle demandé, et 10 étant le nombre de personne dont la date est en dessous de 1989

  9. #9
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par alcabk
    alors je crois qu'il faut que tu crées un nouveau champ avec comme possibilité : <1989 ; 1989 ; 1990 ; >1990 (que tu remplis automatiquement avec des requêtes mise à jour)

    puis tu fais ta requête sur celui-ci
    En effet, c'est une solution. J'y ai pensé mais je me demandais si c'était possible de regler ce probleme, juste par une requete.

    Merci de ton aide!

  10. #10
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par mout1234
    QQ chose de ce genre devrait faire l'affaire (pas testé)

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT "<1989" as Periode, COUNT(*) as NB FROM MATABLE WHERE Date_Naissance <"1989"
    UNION ALL
    SELECT "1989" as Periode, COUNT(*) as NB FROM MATABLE WHERE Date_Naissance ="1989"
    UNION ALL
    SELECT "1990" as Periode, COUNT(*) as NB FROM MATABLE WHERE Date_Naissance ="1990"
    UNION ALL
    SELECT ">1990" as Periode, COUNT(*) as NB FROM MATABLE WHERE Date_Naissance >"1990"

    Je teste ca de suite, merci!

  11. #11
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par Junior_jef
    Non, ce n'est pas logique, mais ce n'est pas moi qui ai créé la DB.
    Heu en fait, si tu ne stockes que l'année, il est normal de le stocker en texte.


    Citation Envoyé par Junior_jef
    Par contre, quand je dis 1989 10, c'était pour montrer le résultat d'un exemple:

    <1989 étant l'intervalle demandé, et 10 étant le nombre de personne dont la date est en dessous de 1989
    Oui désolé, j'ai compris aprés coup...
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  12. #12
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    Merci beaucoup pour votre aide, cela fonctionne tres tres bien!!!

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

Discussions similaires

  1. Réponses: 17
    Dernier message: 15/05/2012, 17h22
  2. req sql avec intervalle de date
    Par ahmedmido dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/12/2008, 15h49
  3. [Transact SQL] Comparer des intervales de dates
    Par jowsuket dans le forum Langage SQL
    Réponses: 5
    Dernier message: 21/05/2008, 12h25
  4. Requete SQL sur table dbase et date du jour
    Par Jean-François PETIT dans le forum Bases de données
    Réponses: 5
    Dernier message: 29/03/2005, 10h31
  5. Réponses: 9
    Dernier message: 17/01/2004, 11h51

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