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

InterBase Discussion :

requete sql pour recuperer le dernier enregistrement inséré ?


Sujet :

InterBase

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 31
    Points : 17
    Points
    17
    Par défaut requete sql pour recuperer le dernier enregistrement inséré ?
    bonjour

    dans une table qui contien un champ date;j'aimerai bien savoir s'il existe une requette sql pour recuperer l'enregistrement le plus recent(date) ou recuperer le dernier enregistrement inserer dans cette table ?

    merci

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 792
    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 792
    Points : 34 013
    Points
    34 013
    Billets dans le blog
    14
    Par défaut
    Récupérer la ligne qui a la date la plus récente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM tatable
    WHERE colonnedate = MAX(colonnedate)
    Récupérer la dernière ligne enregistrée dans une table avec une clé primaire auto-incrémentée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM tatable
    WHERE colonnecleprimaire = MAX(colonnecleprimaire)
    Compris le principe ?
    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 !

  3. #3
    Membre confirmé Avatar de elbj
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Services à domicile

    Informations forums :
    Inscription : Novembre 2004
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Bonjour

    Je pense qu'un supercalculateur ne pourrait compter le nombre de fois où une question strictement identique a été posée. Ce serait bien de chercher dans le forum avant de poster une question. D'ailleurs cela fait partie des bonnes pratiques d'utilisation du forum.

    Donc en recherchant "dernier enregistrement" sur le forum on obtient le résultat suivant.

    Cordialement
    Christophe B.

  4. #4
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 749
    Points : 2 962
    Points
    2 962
    Par défaut
    Est-ce que cette table reprend un champs numérique qui est incrémenté lors de chaque ajout ? Ce serait la meilleure manière de procéder.

    Maintenant si tu n'as qu'un champs date, je te conseille aussi d'y ajouter l'heure (et donc DateTime) afin que ton record soit plus aisément localisable.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 716
    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 : 21 716
    Points : 52 380
    Points
    52 380
    Billets dans le blog
    4
    Par défaut
    Attention : un auto incrément cela peut fonctionner en décroissance et cela peut se débrancher. Autrement dit, cette requête est généralement fausse.

    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/ * * * * *

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    et comment faire pour recuperer l'avant dernier enregistrement inserer ?
    merci pour vos repenses

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 792
    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 792
    Points : 34 013
    Points
    34 013
    Billets dans le blog
    14
    Par défaut
    Toujours en se basant sur le fait que tu as un champ DATE ou DATETIME qui contient la date et/ou l'heure de la création de la ligne, la requête ci-dessous te donne les deux plus récents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * 
    FROM tatble
    ORDER BY colonnedate DESC
    LIMIT 2
    Dès lors il est facile de trouver l'avant dernier inséré, qui se trouve être le dernier de la liste retournée par la requête précédente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT *
    FROM (
      SELECT * 
      FROM tatble
      ORDER BY colonnedate DESC
      LIMIT 2
    ) tmp
    ORDER BY colonnedate ASC
    LIMIT 1
    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 !

  8. #8
    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 763
    Points
    30 763
    Par défaut
    Ne pas oublier que LIMIT n'est pas une clause du langage SQL normalisé.
    Cette requête n'est donc utlisable que sur un nombre restreint de SGBD
    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.

  9. #9
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 277
    Points : 11 733
    Points
    11 733
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Ne pas oublier que LIMIT n'est pas une clause du langage SQL normalisé.
    Cette requête n'est donc utlisable que sur un nombre restreint de SGBD
    Salut Al1 !

    taze1, peux-tu nous préciser ton SGBD ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    j'utilise rows a la place de limit (interbase)

  11. #11
    Membre chevronné

    Profil pro
    Chef de Projet / Développeur
    Inscrit en
    Juin 2002
    Messages
    594
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de Projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2002
    Messages : 594
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour,

    Quand on va chercher "le dernier enregistrement créé", il faut faire attention au type de transaction en cours, pour être certain de bien aller chercher le dernier créé par moi

    Je suppose que c'est pour récupérer la clé primaire afin de la fournir comme clé étrangère à un enregistrement détails dans une autre table.

    Effectuer une recherche à la suite de chaque création ne me paraît pas le plus optimisé.

    Donc personnellement, je fais une requête pour obtenir un nouveau générateur,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT GEN_ID( "MON_GENERATEUR" , 1 ) FROM RDB$DATABASE
    et j'affecte moi même la valeur obtenu comme clé primaire à mon enregistrement maitre.
    Ainsi je n'ai pas besoin de rechercher l'enregistrement que je viens de créer.

    Si le trigger before insert est bien écrit, l'auto-incrémentation se fera très bien si mon INSERT ne fourni pas de clé primaire ou utilisera ma clé primaire si j'en fourni une.

    Les seuls 2 défauts que je vois à cette méthode :
    • incompatibilité avec d'autres SGBD (mais cela se contourne avec un peu d'encapsulation. Mon programme fonctionne tant sous Firebird que MySQL alors que la récupération de la clé primaire se fait très différemment sous ces deux systèmes)
    • je peux perdre des générateurs plus facilement qu'avec les triggers (mais est-ce un vrai problème ?).


    Cordialement
    Gabriel
    --
    vanquish

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2006
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    Bonjour;
    Permettez-moi de participer dans cette discussion qui m'intéresse beaucoup

    Vanquish, pouvez-vous encore expliquer votre méthode

    Le trigger de ma table se présente ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TRIGGER TRIG_IDCOMMANDE_GENID FOR COMMANDE
    ACTIVE BEFORE INSERT POSITION 0
    AS
    BEGIN
      IF ( NEW.id_commande IS NULL ) THEN
        NEW.id_commande = GEN_ID(gen_commande_id,1);
    END
    Si j'affecte moi même la valeur de ID_COMMANDE à l'insertion, et en cas de roolback est-ce correct de faire
    SELECT GEN_ID( "MON_GENERATEUR" , -1 ) FROM RDB$DATABASE
    afin de ne pas perdre de position de l'auto-incrément de ma clé primaire ?




    Désolé mais je suis vraiment débutant

  13. #13
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 017
    Points : 40 932
    Points
    40 932
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par mameziane Voir le message
    est-ce correct de faire
    SELECT GEN_ID( "MON_GENERATEUR" , -1 ) FROM RDB$DATABASE
    afin de ne pas perdre de position de l'auto-incrément de ma clé primaire ?
    Non , à mon avis ta proposition va modifier la valeur par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT GEN_ID( "MON_GENERATEUR" , 0 ) -1  FROM RDB$DATABASE
    ne modifie en rien la valeur du générateur
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  14. #14
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 25
    Points : 21
    Points
    21
    Par défaut
    ça Bien Marcher avec moi de recuper la derniere date ou bien le dernier enregestremnt
    base de donne (absolute database);

    pour la dernièredate:
    //******pour récupérer la dernier date enregistre *****//
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT MAX(COLONNEDATE) as "DERNIER-DATE" from VOTRETABLE
    //********pour récupérer tous les enregistrement de la dernier date enregistre***********//
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from VOTRETABLE where COLONNEDATE = (SELECT MAX(COLONNEDATE) as "DERNIER-DATE" from VOTRETABLE)
    //*******************//
    pour récupérer le dernier enregistrement :
    //*******************//
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(ID_CLEPRIMAIRE) as "DERNIER_ID" from VOTRETABE
    //******POUR RECUPERE TOUTE LA LIGNE DE DERNIER ENREGESTREMENT ****//
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from VOTRETABLE where ID_CLEPRIMAIRE = (SELECT MAX(ID_CLEPRIMAIRE) as "DERNIER_ID" from VOTRETABLE)

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/12/2010, 18h02
  2. recuperer le dernier enregistrement dans un table sql
    Par moukit233 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 23/07/2009, 13h16
  3. Requete sql pour création de table dans une base access
    Par Ben156 dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/01/2006, 23h12
  4. Réponses: 5
    Dernier message: 29/12/2005, 08h03
  5. Réponses: 5
    Dernier message: 01/02/2005, 18h29

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