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

Sybase Discussion :

requetes avec clause max


Sujet :

Sybase

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut requetes avec clause max
    Bonjour

    J'ai une table qui a la structure suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Name
     
    StartDate
     
    EndDate
     
    OrderNumber
    Pour un meme Name on a plusieurs lignes avec différentes Start_date et EndDate

    Je souhaite recuperer la ligne ou on a la EndDate maximale. J'ai passé une demi journée sans trouver.

    Merci

  2. #2
    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 803
    Points
    30 803
    Par défaut
    Cette question a été posée de nombreuses fois sur ce forum.
    Voici une des réponses possibles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT  *
    FROM    matable AS t1
    WHERE   EXISTS
            (   SELECT  1
                FROM    matable AS t2
                WHERE   t1.name = t2.name
                HAVING  t1.enddate  = MAX(t2.enddate)   
            )
    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.

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut
    Merci

    par contre j'ai que des vue dans ma requete et quand j'execute la requete avec les script que vous avez propose j'ai une erreur :


    The query and the views in it exceed the limit of 50 tables
    Je suis sous Sysbase

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut
    Je n'y arrive pas..

    J'ai une Vu VUE dans la quelle j'ai par exemple les lignes suivantes :

    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
     
     
    Name  BirthDate       StartDate        EnDate     IDAdm   Quantity  AdmDate 
     
    aaa     01-01-2006   10-10-2009   11-10-2009   12        2.5      12-10-2009
    aaa     01-01-2006    10-10-2009   11-10-2009  12       0.2        13-10-2009
    aaa       01-01-2006    10-10-2009   11-10-2009     12  0.6      14-10-2009
     
    bbbb      01-09-2006    10-11-2009   11-11-2009     13   1        12-11-2009
    bbbb      01-09-2006    10-11-2009   11-11-2009     13   1.2      13-11-2009
    bbbb      01-09-2006    10-11-2009   11-11-2009     13   3.2      14-11-2009
    bbbb      01-09-2006    10-11-2009   11-11-2009     13    2.5     15-11-2009
    bbbb      01-09-2006    10-11-2009   11-11-2009     13    2.5     16-11-2009
     
    dd         01-11-2006    10-12-2009   11-12-2009      15    5.2    16-12-2009
    dd         01-11-2006    10-12-2009   11-12-2009       15    4.2   17-12-2009
    dd         01-11-2006    10-12-2009   11-12-2009       15     2.5  18-12-2009
    dd         01-11-2006    10-12-2009   11-12-2009       15    2.1 19-12-2009
    J'essaie de réciprere les lignes correspondante aux max des AdmDate pour chaque Name : a savoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    aaa       01-01-2006    10-10-2009   11-10-2009     12       0.6  14-10-2009
     
    bbbb      01-09-2006    10-11-2009   11-11-2009     13      2.5  16-11-2009
     
    dd         01-11-2006    10-12-2009   11-12-2009       15     2.1 19-12-2009
    MErci pour votre aide

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut
    Personne ?

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    C'est un problème récurrent sur ce forum.
    Vous trouverez une solution ici :
    http://www.developpez.net/forums/d84...e/#post4817771

  7. #7
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Si ton problème est que ta vue référence trop de tables (d'après ton message d'erreur), il faut éviter de la citer deux fois (ce qui est dramatique quand même !) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT  *
    FROM  
            (   SELECT t.*, dense_rank() OVER(PARTITION BY t.name ORDER BY t.enddate DESC) rk
                FROM    matable as t   
            ) t2
    WHERE rk = 1

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Le problème, c'est que Sybase - selon la version - les fonctions analytiques il peut ne pas connaître. C'est le cas de Sybase ASE.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Si c'est le cas et que Sybase n'accepte pas les fonctions analytiques, une solution pourrait être de retravailler les vues utilisées pour qu'elles référencent moins de tables lorsque c'est possible.
    Ou le modèle de données.

  10. #10
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut
    J'ai essayé avec ta solution Wildar mais j'ai toujours cette erreur :

    ErrorCode: 4408
    Error: The query and the views in it exceed the limit of 50 tables.

  11. #11
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Et bien comme dit plus haut le message d'erreur semble clair :
    La ou les vues auxquelles ta requête fait appel utilisent plus de 50 tables et ton SGBD n'aime pas ça.

    Il faut que tu obtiennes de ton DBA une vue plus simple à interroger.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  12. #12
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut
    Est-ce qu'on peux utiliser une table temporaire eu lieu de la vue ..?
    merci

  13. #13
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    A priori oui, à condition que tu aies les droits de création de tables je pense.
    Et puis si tu as tous les droits sur la BDD, essaie de faire directement une requête simple au lieu de faire appel à la vue.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  14. #14
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut
    Je ne pourrais pas ..car meme cette vue est construite à partir d'autres vue (5 vues)..ma requete première tapait dans 5 vues ..et j'ai crée une vue ou je mets le resultat de cette requete (pour simplifier)..voila pourquoi il y a plus que 50 tables dans l'affaire .
    Est ce un problème spécifique à Sysbase ?

  15. #15
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par MASSAKA Voir le message
    Je ne pourrais pas ..car meme cette vue est construite à partir d'autres vue (5 vues)..ma requete première tapait dans 5 vues ..et j'ai crée une vue ou je mets le resultat de cette requete (pour simplifier)..voila pourquoi il y a plus que 50 tables dans l'affaire .
    D'où ma suggestion de repartir de zéro et de requêter directement les tables au lieu de passer par des vues... si tu les privilèges nécessaires pour le faire puisque les vues sont souvent là justement pour masquer la vraie structure des tables et mieux contrôler les accès aux données si je ne m'abuse.

    Est ce un problème spécifique à Sysbase ?
    Moi pas savoir. Moi pas connaître Sybase.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  16. #16
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut
    J'ai réussi à avoir un résultat avec une table temporaire..
    MErci pour tous

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

Discussions similaires

  1. Optimisation d'une requete avec fonction Max
    Par ghargamaster dans le forum Langage SQL
    Réponses: 13
    Dernier message: 28/02/2011, 09h25
  2. Requete avec clause max
    Par MASSAKA dans le forum Sybase
    Réponses: 6
    Dernier message: 09/12/2009, 13h42
  3. regroupement de tables dans une requete avec chiffre MAX
    Par db48752b dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 15/10/2009, 11h02
  4. [MySQL] Afficher le resultat d'une requete avec clause
    Par spawns dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 29/01/2009, 23h18
  5. Problème dans requête avec clause MAX
    Par tonio-lille dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/10/2007, 17h00

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