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 :

Quinze derniers enregistrements


Sujet :

Requêtes et SQL.

  1. #1
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    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é
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    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 actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    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 confirmé
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Points : 542
    Points
    542
    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 actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    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
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    ben c'est access ton SGBD

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    j'aurais appris au moins une chose...
    BenoitM, j 'ai un soucis avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    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 actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    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 actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    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é
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    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 actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Punkoff,
    c'est ok , j'ai pu traduire le code sql en access

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING (((dbo_vwInductionGrp1Samples.TimeStamp) Between Minute(Now())-15 And Minute(Now())))
    la requete complète est donc la suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    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 actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    c'est la traduction litéralle en sql de la requete lorsque j'ai crée la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    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é
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ma_col between 50 and 5
    la traduction d'un between est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. [debutant] selection des 6 derniers enregistrements
    Par LoLoSS dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/07/2004, 15h27
  2. Recupération du ID du dernier enregistrement
    Par mustang-gx dans le forum Bases de données
    Réponses: 2
    Dernier message: 13/03/2004, 10h04
  3. Récupérer dernier enregistrement d'une table?
    Par Invité dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 19/01/2004, 11h38
  4. Réponses: 10
    Dernier message: 01/08/2003, 13h45
  5. Trouver le dernier enregistrement d'une table
    Par remi59 dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/03/2003, 14h54

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