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 :

Requête sur un champ date


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 138
    Points : 45
    Points
    45
    Par défaut Requête sur un champ date
    Bonjour,

    Voilà, je bloque sur une requête que j'ai créer pour une selection dans une table a partir d'un champ "date".

    Concrêtement, j'ai une table d'entreprises contenant des éléments mis à jour chaque année pour chaque entreprise.
    En résumé 1 mise à jour annuelle d'entreprise = 1 ligne de ma table
    En conséquence dans ma table une entreprise peut avoir plusieurs mise à jour (donc ligne) comme suis :
    entreprise 1 : mise à jour le 31/12/2003
    entreprise 1 : mise à jour le 31/12/2004
    entreprise 1 : mise à jour le 31/12/2005
    entreprise 2 : mise à jour le 31/12/2004
    entreprise 2 : mise à jour le 31/12/2005
    entreprise 2 : mise à jour le 31/12/2006
    ect...

    J'ai donc pour cela un champ date au format JJ/MM/AAAA.

    Et voici donc la requête que je souhaite créer :
    Je veux sortir le nom des entreprises n'ayant pas eu de mise à jour depuis le 31/12/2002.
    Ce qui me pose problème en fait c'est que je n'arrive pas à savoir comment dire à la requête de ne prendre que ceux qui s'arrête au 31/12/2002 et en aucun cas ceux qui peuvent avoir du 2002 mais aussi les années suivantes...

    Si vous pouvez m'aider à résoudre ce ptit soucis, je vous en serait reconnaissant (ça se trouve c'est tout con, mais là je bloque quoi) Merci d'avance.

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    pourrait-on avoir le DDL de la table, ainsi que le SGBD ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select nom,max(date)
    from latable
    group by nom
    having max(date) <= '31/12/2002'

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 138
    Points : 45
    Points
    45
    Par défaut
    Bonjour Mathusalem,

    Merci pour tes éléments de réponse.
    Ma base de données tourne sous Oracle 9.i
    heuuu tu entends quoi par DDL de la table ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 138
    Points : 45
    Points
    45
    Par défaut
    Quand j'essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select * from bilan t
    Group By Siret
    Having max(DATECLOTURE) <= '31/12/2002'
    en sachant que bilan c'est le nom de ma table
    que siret c'est ce qui remplace le "nom" pour chaque entreprise
    que DATECLOTURE c'est le nom de mon champ date

    ça me dis en message d'erreur :

    ORA-00979 : N'est pas une expression GROUP BY

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 138
    Points : 45
    Points
    45
    Par défaut
    J'ai tenté en modifiant un peu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select SIRET, max(DATECLOTURE) from bilan t
    GROUP BY SIRET
    having max(DATECLOTURE) <= '31/12/2002'
    La requête tourne... tourne... tourne toujours... mais y'a aucun résultat qui sort... ça donne l'impression de tourner dans le vide !

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 138
    Points : 45
    Points
    45
    Par défaut
    Autant pour moi, ça a mis du temps, mais le résultat est là et semble correct ! merci encore !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 138
    Points : 45
    Points
    45
    Par défaut
    Bon finalement ma requête n'est pas terminée, car pas assez précise.
    Pour afiner mes résultats j'ai besoin de joindre une autre table, mais est-ce que c'est possible à faire avec ma requête de départ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT SIRET, max(DATECLOTURE) FROM bilan t
    GROUP BY SIRET
    HAVING max(DATECLOTURE) <= '31/12/2002'
    Si tel est le cas pouvez me dire ce que je dois ajouter a ma requête ?
    Les paramètre a prendre en compte sont :
    2eme table = Societe
    champ en commun des 2 tables : siret
    champs à vérifier pour la selection dans ma seconde table : Cessation et/ou liquidation. (a savoir que dans ma table ces 2 champs sont des nombres, et que si le champ est nul cela veut dire que ce n'est pas coché, sinon y'a le chiffre 1).

    En résumé je veux exclure de ma 1ere sélection les lignes contenant ou une cessation ou une liquidation dans ma 2nd table.

    Merci de votre aide....

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 802
    Points
    30 802
    Par défaut
    Je t'encourage à aller consulter les Cours sur les Jointures et les Cours sur les Regroupements
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 138
    Points : 45
    Points
    45
    Par défaut
    J'ai déjà consulté et tenté des solutions suite à ça, mais comme j'arrive à rien je me tourne vers vous !

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 745
    Points : 166
    Points
    166
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT SIRET, max(DATECLOTURE) FROM bilan t, Societe s
    where s.siret =  t.siret
    and (cessation is not null or liquidation is not null)
    GROUP BY t.SIRET
    HAVING max(DATECLOTURE) <= '31/12/2002'
    peut etre un truc comme cela....

    a modifier surement!

Discussions similaires

  1. Requête SQL sur une base Access, where sur un champ date
    Par digital prophecy dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/05/2008, 16h47
  2. requête sur le champ date
    Par bouba_95 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 10/01/2007, 15h10
  3. requêtes sur des champs date
    Par wiwi dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 03/02/2006, 14h14
  4. Tri dans une DBGrid sur un champ date au format jj/mm
    Par Jeankiki dans le forum Bases de données
    Réponses: 10
    Dernier message: 31/10/2004, 12h32
  5. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56

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