Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 13 sur 13
  1. #1
    Invité régulier
    Inscrit en
    mai 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 31
    Points : 6
    Points
    6

    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 Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 896
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    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 : 13 896
    Points : 25 040
    Points
    25 040

    Par défaut

    Récupérer la ligne qui a la date la plus récente :
    Code :
    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 :
    1
    2
    3
    SELECT *
    FROM tatable
    WHERE colonnecleprimaire = MAX(colonnecleprimaire)
    Compris le principe ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « 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 expérimenté Avatar de elbj
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    novembre 2004
    Messages
    368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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 : 368
    Points : 517
    Points
    517

    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.
    Mon blog

  4. #4
    Membre émérite Avatar de cavo789
    Homme Profil pro Christophe Avonture
    Développeur Web
    Inscrit en
    mai 2004
    Messages
    672
    Détails du profil
    Informations personnelles :
    Nom : Homme Christophe Avonture
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : mai 2004
    Messages : 672
    Points : 872
    Points
    872

    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 - Développeur de

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro Frédéric BROUARD
    Expert SGBDR & SQL
    Inscrit en
    mai 2002
    Messages
    13 649
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric BROUARD
    Localisation : France

    Informations professionnelles :
    Activité : Expert SGBDR & SQL
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 13 649
    Points : 30 237
    Points
    30 237

    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
    Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
    http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  6. #6
    Invité régulier
    Inscrit en
    mai 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 31
    Points : 6
    Points
    6

    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 Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 896
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    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 : 13 896
    Points : 25 040
    Points
    25 040

    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 :
    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 :
    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 de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « 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 Alain
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    5 670
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 5 670
    Points : 14 176
    Points
    14 176

    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 Antoine Dinimant
    Architecte décisionnel
    Inscrit en
    octobre 2006
    Messages
    5 958
    Détails du profil
    Informations personnelles :
    Nom : Homme Antoine Dinimant
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : octobre 2006
    Messages : 5 958
    Points : 10 775
    Points
    10 775

    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 est parue !

  10. #10
    Invité régulier
    Inscrit en
    mai 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 31
    Points : 6
    Points
    6

    Par défaut

    j'utilise rows a la place de limit (interbase)

  11. #11
    Membre expérimenté
    Profil pro Gabriel
    Chef de Projet / Développeur
    Inscrit en
    juin 2002
    Messages
    317
    Détails du profil
    Informations personnelles :
    Nom : Gabriel
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : juin 2002
    Messages : 317
    Points : 536
    Points
    536

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

  12. #12
    Futur Membre du Club
    Profil pro Med Ali Meziane
    Inscrit en
    juillet 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Nom : Med Ali Meziane
    Âge : 49
    Localisation : Tunisie

    Informations forums :
    Inscription : juillet 2006
    Messages : 40
    Points : 19
    Points
    19

    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 :
    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 Serge Girard
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    5 518
    Détails du profil
    Informations personnelles :
    Nom : Homme Serge Girard
    Âge : 58
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 5 518
    Points : 10 825
    Points
    10 825
    Billets dans le blog
    3

    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 :
    1
    2
     
    SELECT GEN_ID( "MON_GENERATEUR" , 0 ) -1  FROM RDB$DATABASE
    ne modifie en rien la valeur du générateur
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

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
  •