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 MySQL Discussion :

Dernier enregistrement + GROUP BY


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Par défaut Dernier enregistrement + GROUP BY
    Bonjour à tous,

    Je sollicite votre aide pour une requête.
    Je souhaite récupérer uniquement le dernier enregistrement pour chaque 'detecteur_ID'

    Voilà ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM detection WHERE timestamp BETWEEN (NOW( ) - INTERVAL 1 DAY) AND NOW( ) ORDER BY timestamp DESC GROUP BY detecteur_ID
    Mais ça ne fonctionne pas !!

    Merci


    P.S. J'oublie de préciser la structure de ma table : 4 champs -> timestamp, detecteur_ID, detecteur_location, status

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    WITH T AS
    (
    SELECT *, ROW_NUMBER() OVER(PARTITION BY detecteur_ID ORDER BY timestamp DESC) AS N
    FROM   detection 
    WHERE  timestamp BETWEEN (NOW() - INTERVAL 1 DAY) AND NOW() 
    )
    SELECT *
    FROM   T
    WHERE  N = 1;
    À me lire sur les fonctions de fenêtrage : http://sqlpro.developpez.com/article...clause-window/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Par défaut
    Merci pour ta réponse.
    Je précise que je suis en PHP MYSQL,
    Je peux mettre ce type de requête ??

    Il me met une erreur :
    You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'T AS (SELECT *, ROW_NUMBER() OVER(PARTITION BY detecteur_ID ORDER BY timestamp D' at line 1

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Non, MySQL ne prend pas en charge les fonctions de fenêtrage.
    En revanche, le forum prend en charge la fonction de recherche . Vous y trouverez votre bonheur en plusieurs exemplaires, cette demande revenant très régulièrement.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Par défaut
    C'est dommage d'avoir encore ce type de réponse...
    Si je pose la question, c'est que
    - Je ne sais pas comment le faire
    - La recherche a été infructueuse OU je ne sais pas quel terme chercher (car le mot fenetrage, ça me parle pas, désolé...)

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT LaTable.*
    FROM LaTable
    INNER JOIN (
        SELECT detecteur_id, MAX(timestamp) as dernier
        FROM LaTable
        GROUP BY detecteur_id
    ) Der
        ON Der.detecteur_id = LaTable.detecteur_id
        AND der.dernier = LaTable.Timestamp

Discussions similaires

  1. [MySQL-5.0] GROUP BY qui ne donne pas les derniers enregistrements
    Par laul33 dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/03/2014, 15h05
  2. Group BY et dernier enregistrement
    Par Slaash0 dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/02/2013, 17h38
  3. [Toutes versions] Dernier enregistrement groupés
    Par DonKnacki dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 11/09/2012, 11h47
  4. [LINQ] Dernier enregistrement d'un groupe
    Par Amuny dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/08/2012, 15h00
  5. dernier enregistrement par group by
    Par startout dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/07/2006, 16h05

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