Publicité
+ Répondre à la discussion
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 23
  1. #1
    Membre habitué
    Inscrit en
    avril 2007
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 643
    Points : 105
    Points
    105

    Par défaut Quinze derniers enregistrements

    Bonjour,
    J'ai une requete où j'aimerais afficher simplement les 15 derniers enregistrements.
    j'ai essayé avec le language SQL mais je dois avouer que je débute dans ce language.
    Une aide me serait bien précieuse...

    Voici ma requete traduite en sql :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT
     dbo_vwInductionGrp1Samples.TimeStamp,
     dbo_vwInductionGrp1Samples.Induction1, 
    dbo_vwInductionGrp1Samples.Induction2, 
    dbo_vwInductionGrp1Samples.Induction3, 
    dbo_vwInductionGrp1Samples.Induction4,
     dbo_vwInductionGrp1Samples.Induction5
     
    FROM dbo_vwInductionGrp1Samples
     
    GROUP BY dbo_vwInductionGrp1Samples.TimeStamp, dbo_vwInductionGrp1Samples.Induction1, dbo_vwInductionGrp1Samples.Induction2, dbo_vwInductionGrp1Samples.Induction3, dbo_vwInductionGrp1Samples.Induction4, dbo_vwInductionGrp1Samples.Induction5;

  2. #2
    Expert Confirmé
    Homme Profil pro Benoît
    Inscrit en
    février 2003
    Messages
    1 738
    Détails du profil
    Informations personnelles :
    Nom : Homme Benoît
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : février 2003
    Messages : 1 738
    Points : 2 908
    Points
    2 908

    Par défaut

    quelle base de donnée?
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  3. #3
    Expert Confirmé Sénior
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 103
    Points : 5 131
    Points
    5 131

    Par défaut

    bonjour,

    A quoi vous sert le group by ? vous n'utilisez pas de fonction d'aggrégation donc...

    A minima il faudrai le remplacer par un distinct, mais est-ce utile ?


    Sinon, pour votre demande, il faut d'abord trier le résultat (ORDER BY...) et ajouter à ceci une limitation de 15.

    Traductible, selon les sgbd, par "limit", "top", "fetch first n rows", etc

  4. #4
    Membre habitué
    Inscrit en
    avril 2007
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 643
    Points : 105
    Points
    105

    Par défaut

    bonjour les punkoff et benoitM
    je dois dire que je suis perdu avec ce language..

    Benoit M, lorsque tu poses la question , quelle base de donnée?
    c'est la base "dbo_vwInductionGrp1Samples"

    punkoff, je suis perdu par ces termes techniques "limit", "top", "fetch first n rows", ;
    Disons que j'adopterai ta solution et ainsi cela me permettrait de comprendre ta démarche

  5. #5
    Membre éprouvé
    Avatar de Bibeleuh
    Homme Profil pro Richard
    Développeur
    Inscrit en
    septembre 2010
    Messages
    196
    Détails du profil
    Informations personnelles :
    Nom : Homme Richard
    Âge : 26
    Localisation : France

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

    Informations forums :
    Inscription : septembre 2010
    Messages : 196
    Points : 487
    Points
    487

    Par défaut

    Citation Envoyé par facteur Voir le message
    Benoit M, lorsque tu poses la question , quelle base de donnée?
    c'est la base "dbo_vwInductionGrp1Samples"
    )
    Je pense qu'il voulait plutôt savoir sous quel SGBD tu travailles ( Oracle , MySQL , SQL-Server ...)

  6. #6
    Membre habitué
    Inscrit en
    avril 2007
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 643
    Points : 105
    Points
    105

    Par défaut

    bonjour bibeleu..
    Oups..quel nul je suis..
    ben ..disons que..en fait je n'en sers rien..
    Ce que je sais c'est que je suis sous windows 7 avec un access 2003..

  7. #7
    Expert Confirmé
    Homme Profil pro Benoît
    Inscrit en
    février 2003
    Messages
    1 738
    Détails du profil
    Informations personnelles :
    Nom : Homme Benoît
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : février 2003
    Messages : 1 738
    Points : 2 908
    Points
    2 908

    Par défaut

    ben c'est access ton SGBD

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT TOP 15
    dbo_vwInductionGrp1Samples.TimeStamp,
    dbo_vwInductionGrp1Samples.Induction1, 
    dbo_vwInductionGrp1Samples.Induction2, 
    dbo_vwInductionGrp1Samples.Induction3, 
    dbo_vwInductionGrp1Samples.Induction4,
    dbo_vwInductionGrp1Samples.Induction5
    FROM dbo_vwInductionGrp1Samples
    ORDER BY dbo_vwInductionGrp1Samples.TimeStamp DESC
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  8. #8
    Membre habitué
    Inscrit en
    avril 2007
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 643
    Points : 105
    Points
    105

    Par défaut

    j'aurais appris au moins une chose...
    BenoitM, j 'ai un soucis avec ce code
    Code :
    ORDER BY dbo_vwInductionGrp1Samples.TimeStamp DESC
    ;
    Il tri simplement ma requet avec le champ "TimeStamp" décroissant.
    Alors que ce champ est un champ minute qui s'écoule sur 60 minutes . Et moi je souhaite afficher les 15 derniers minutes de ma requete.

  9. #9
    Expert Confirmé Sénior
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 103
    Points : 5 131
    Points
    5 131

    Par défaut

    Et comment votre sgbd va deviner les heures, les jours , ...?

    donnez la/les colonnes de tri et votre besoin réel.

    De plus un jeu de données exemple pourrait simplifier grandement la résolution de ce problème.

  10. #10
    Membre habitué
    Inscrit en
    avril 2007
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 643
    Points : 105
    Points
    105

    Par défaut

    le champ "TimeStamp" est sans cesse en mouvement. A chaque minute passée, la requete indique le nombre de produits triés par antenne ( 1; 2;3 ; et 5).
    Le champ "TimeStamp", contient ces minutes sous la forme de 2 chiffres .
    dans l'exemple, ci dessous, 57 correspond à 14h57 ; 58 à 14h58 et 59 à 14h59 ..etc..

    Voici un recap de ma requete qui risque de ne pas etre trés lisible sur le forum :

    Code :
    1
    2
    3
    4
    TimeStamp	Induction1	Induction2	Induction3	   Induction4	Induction5
    59	0	0	0	0	0
    58	840	480	60	420	180
    57	1080	480	0	0	300
    Je souhaiterais que ma requete affiche uniquement les 15 derniers minutes .

  11. #11
    Expert Confirmé Sénior
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 103
    Points : 5 131
    Points
    5 131

    Par défaut

    ok,

    lisez ceci : http://sqlpro.developpez.com/cours/sqlaz/select/

    en particlier le paragraphe relatif à la clause WHERE.

    Ensuite cherchez dans la doc d'access le moyen de :
    - afficher le timestamp actuel (c'est un type de donnée composé de la date et de l'heure)
    - extraire les minutes (en norme SQL c'est extract(minute from mon_timestamp)

    Ensuite comparez cette valeur - 15 à votre colonne de nommée "timstamp" (c'est générallement une mauvaise idée de donner un nom réservé SQL à une colonne)

    Revenez avec vos essais

  12. #12
    Membre habitué
    Inscrit en
    avril 2007
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 643
    Points : 105
    Points
    105

    Par défaut

    Bonjour pukoff,

    j'ai suivi tes instructions editées sur ton dernier message.
    J'ai feuillé l'édito sur le language sql.
    Mais je rencontre un soucis :
    Le champ "TimeStamp" est un champ numérique dont je ne peux pas modifier.
    La table "dbo_vwInductionGrp1Samples" m'est imposée ainsi.
    Par conséquent, lorsque j'essaie de créer la requete en sql :
    Code :
    1
    2
    3
    SELECT *
    FROM dbo_vwInductionGrp1Samples
    WHERE EXTRACT (minute FROM dbo_vwInductionGrp1Samples.TimeStamp)
    j'ai un message d'erreur : erreur de syntaxe (opérateur absent) dans l'expression EXTRACT (minute FROM dbo_vwInductionGrp1Samples.TimeStamp)

  13. #13
    Expert Confirmé Sénior
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 103
    Points : 5 131
    Points
    5 131

    Par défaut

    bonjour,

    vous n'avez donc pas compris la démarche (je me suis peut-être mal exprimé).

    Mes connaissances en access étant null, je vais juste vous indiquer une requête en sql normalisé qu'il faudra transcrire en access (il y a un forum access sur ce site) :

    Code :
    1
    2
    3
    4
     
    SELECT *
    FROM dbo_vwInductionGrp1Samples
    WHERE Timestamp between EXTRACT (minute FROM current_timestamp) - 15 and extract (minute FROM current_timestamp)
    Une piste pour le recoupement (même si cette page n'est pas à jour) http://sqlpro.developpez.com/cours/sqlaz/fonctions/

  14. #14
    Membre habitué
    Inscrit en
    avril 2007
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 643
    Points : 105
    Points
    105

    Par défaut

    Ok je comprend
    Je vais essayer de retranscrire ce code en access.
    Donc si je comprend bien , un language sql peut ne pas etre compris par le programme Access ?

  15. #15
    Expert Confirmé Sénior
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 103
    Points : 5 131
    Points
    5 131

    Par défaut

    Hmm,

    c'est plutôt qu'il y a des normes SQL établit et ensuite chaque SGBD implémente ou non ces normes.

    Access étant ... access (ce n'est pas vraiment un SBGD), de simples requêtes peuvent devenir assez casse tête à construire.

  16. #16
    Membre habitué
    Inscrit en
    avril 2007
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 643
    Points : 105
    Points
    105

    Par défaut

    Punkoff,
    c'est ok , j'ai pu traduire le code sql en access

    Code :
    HAVING (((dbo_vwInductionGrp1Samples.TimeStamp) Between Minute(Now())-15 And Minute(Now())))
    la requete complète est donc la suivante
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT 
    dbo_vwInductionGrp1Samples.TimeStamp, 
    dbo_vwInductionGrp1Samples.Induction1,
     dbo_vwInductionGrp1Samples.Induction2, 
    dbo_vwInductionGrp1Samples.Induction3, 
    dbo_vwInductionGrp1Samples.Induction4,
    dbo_vwInductionGrp1Samples.Induction5
    
    FROM dbo_vwInductionGrp1Samples
    
    GROUP BY dbo_vwInductionGrp1Samples.TimeStamp, dbo_vwInductionGrp1Samples.Induction1, dbo_vwInductionGrp1Samples.Induction2, dbo_vwInductionGrp1Samples.Induction3, dbo_vwInductionGrp1Samples.Induction4, dbo_vwInductionGrp1Samples.Induction5
    
    HAVING (((dbo_vwInductionGrp1Samples.TimeStamp) Between Minute(Now())-15 And Minute(Now())));[/
    Merci pour ton aide

  17. #17
    Expert Confirmé Sénior
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 103
    Points : 5 131
    Points
    5 131

    Par défaut

    pas d'accord avec votre solution.

    A quoi sert le group by ?

    vous le faites sur toutes vos colonnes de selection et n'utilisez pas de fonction d'agrégation.

    Quel est le but de ceci ?


    La restriction mettez la dans un where, si vous avez des doublons utilisez un DISTINCT !

  18. #18
    Membre habitué
    Inscrit en
    avril 2007
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 643
    Points : 105
    Points
    105

    Par défaut

    c'est la traduction litéralle en sql de la requete lorsque j'ai crée la condition
    Code :
    Between Minute(Now())-15 And Minute(Now())))
    dans la zone critère du champ "TimeStamp".
    Et la requete fonctionne trés bien.

  19. #19
    Membre habitué
    Inscrit en
    avril 2007
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 643
    Points : 105
    Points
    105

    Par défaut

    punkoff
    je me rend compte que j'ai un soucis
    la condition ne fonctionne plus lorsque le champ "TimeStamp" (=temps) indique 00( ce qui correspond à 12h00).
    la requete me donne uniquement que 6 enregistrements

    Temps
    0
    1
    2
    3
    4
    5
    6

    Que se passe t il ?

  20. #20
    Expert Confirmé Sénior
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 103
    Points : 5 131
    Points
    5 131

    Par défaut

    Citation Envoyé par facteur Voir le message
    c'est la traduction litéralle en sql de la requete lorsque j'ai crée la condition
    Code :
    Between Minute(Now())-15 And Minute(Now())))
    dans la zone critère du champ "TimeStamp".
    Et la requete fonctionne trés bien.
    je ne parle pas de ca mais de l'utilisation du group by + having qui n'a pas lieu d'être ici.

    Avez-vous lu le tutoriel sur le SELECT que j'avais linké plus haut ?

    Les group by s'utilisent dans ces cas là : http://sqlpro.developpez.com/cours/sqlaz/ensembles/



    C'est le between qui devient incohérent vu que l'on cherche par exemple :
    Code :
    1
    2
     
    ma_col between 50 and 5
    la traduction d'un between est :
    Code :
    1
    2
     
    ma_col >= 50 and ma_col <= 5
    (c'est logique je n'y avais pas pensé)
    Ce qui m'étonne par contre c'est qu'il retourne un résultat.

    Il y aurai moins de problème si votre colonne nommé TimeStamp était vraiment de type timeStamp

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •