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 :

Avoir les n derniers enregistrements


Sujet :

Langage SQL

  1. #1
    Membre régulier Avatar de bruce207
    Inscrit en
    Novembre 2007
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 319
    Points : 124
    Points
    124
    Par défaut Avoir les n derniers enregistrements
    Bonjour,
    je voudrais savoir quel est la syntaxe sql pour avoir les n derniers enregistrements basés sur un critère et aussi comment avoir le dernier enregistrement (le plus récent) sans passer par la date
    Merci

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 220
    Points : 28 201
    Points
    28 201
    Par défaut
    Ça devrait être une requête du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TOP n TesChamps 
    FROM TaTable
    WHERE TesConditions
    ORDER BY ChampDeTri DESC

  3. #3
    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
    Citation Envoyé par bruce207 Voir le message
    et aussi comment avoir le dernier enregistrement (le plus récent) sans passer par la date
    Sans passer par une colonne date, ça n'est pas possible.

  4. #4
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 220
    Points : 28 201
    Points
    28 201
    Par défaut
    Sans passer par une colonne date, ça n'est pas possible.
    FAUX !

    Cela dépend de la manière dont peut être identifier l'enregistrement le plus récent.

    Par exemple, s'il peut être identifié par un champ ID par exemple autoincrémenté, il suffit de faire un tri décroissant sur ce champ et prendre la première ligne retournée.

    Un champ Date n'est pas forcément nécessaire pour avoir une notion chronologique.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Et si vous faites un update ?

  6. #6
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    FAUX !
     
    Cela dépend de la manière dont peut être identifier l'enregistrement le plus récent.
     
    Par exemple, s'il peut être identifié par un champ ID par exemple autoincrémenté, il suffit de faire un tri décroissant sur ce champ et prendre la première ligne retournée.
     
    Un champ Date n'est pas forcément nécessaire pour avoir une notion chronologique.
    Si une même transaction insère 1 000 lignes, est-il judicieux de dire que l'ID 1 est moins récent que l'ID 999? Je ne crois pas.
    Et comme le fait remarquer Waldar, il peut y avoir des update.

    Donc oui, si on veut une notion chronologique, ça semble évident qu'il vaut mieux passer par une colonne date.

  7. #7
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 220
    Points : 28 201
    Points
    28 201
    Par défaut
    Si une même transaction insère 1 000 lignes, est-il judicieux de dire que l'ID 1 est moins récent que l'ID 999? Je ne crois pas.
    Et comme le fait remarquer Waldar, il peut y avoir des update.

    Donc oui, si on veut une notion chronologique, ça semble évident qu'il vaut mieux passer par une colonne date.
    ID 999 sera plus récent car créé en dernier, même s'il s'agit de la même transaction et que cela se fait dans la même seconde (dans le cas d'un autoincrémenté, c'est le compteur qui le dit ).

    Ensuite, tout dépend ce qu'on entend par enregistrement le plus récent, s'agit-il du dernier créé ou du dernier mis à jour.
    Pour moi, sans autre forme de précision il s'agit du dernier créé même si d'autres ont été mis à jour par la suite.

    Et même dans le cas du champ Date, si ta requête Update ne le met pas à jour (s'il s'agit d'une date de création par exemple), ce champ ne te servira pas plus qu'un ID pour déterminer le dernier enregistrement mis à jour.

    Toute la problématique est en fait dans la structure de la base et dans le besoin des données à y stocker.

  8. #8
    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
    Citation Envoyé par sevyc64 Voir le message
    ID 999 sera plus récent car créé en dernier, même s'il s'agit de la même transaction et que cela se fait dans la même seconde (dans le cas d'un autoincrémenté, c'est le compteur qui le dit ).
    Lorsque plusieurs lignes issues d'un même select sont insérées, que l'une où l'autre ait un ID plus élevé est arbitraire et sans intérêt fonctionnel.
    En fait, je vois pas bien ce qui peut pousser à vouloir se passer d'une colonne date si on a besoin d'une chronologie.
    Les timestamp par exemple sont faits pour ça.

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    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 102
    Points : 28 387
    Points
    28 387
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    ID 999 sera plus récent car créé en dernier, même s'il s'agit de la même transaction et que cela se fait dans la même seconde (dans le cas d'un autoincrémenté, c'est le compteur qui le dit ).
    Si tu travailles avec un SGBD avec une structure de traitements parallèle, une plage d'identifiants est attribuée à chaque nœud de calcul. L'identifiant le plus élevé n'est donc pas nécessairement le plus récent dans le cas d'une insertion de nombreuses lignes simultanément.
    Un identifiant auto-incrémenté n'assure que l'identité (unicité), pas la séquence.

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

Discussions similaires

  1. Ramené les X derniers enregistrements
    Par jdotti dans le forum Oracle
    Réponses: 3
    Dernier message: 03/11/2006, 16h39
  2. [Access] Afficher les deux derniers enregistrement
    Par badnane2 dans le forum Access
    Réponses: 10
    Dernier message: 08/07/2006, 14h02
  3. [VB.Net] Afficher les deux derniers enregistrement
    Par badnane2 dans le forum Windows Forms
    Réponses: 15
    Dernier message: 07/07/2006, 19h54
  4. [MySQL] Afficher les 3 derniers enregistrements
    Par Wu dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 02/02/2006, 11h04
  5. Sélectionner les 10 derniers enregistrements
    Par pod1978 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/11/2005, 12h07

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