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
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
Récupérer la ligne qui a la date la plus récente :
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 colonnedate = MAX(colonnedate)
Compris le principe ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT * FROM tatable WHERE colonnecleprimaire = MAX(colonnecleprimaire)
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 !
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.
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)
Mes scripts Open Source : https://github.com/cavo789
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/ * * * * *
et comment faire pour recuperer l'avant dernier enregistrement inserer ?
merci pour vos repenses
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 :
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 SELECT * FROM tatble ORDER BY colonnedate DESC LIMIT 2
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 !
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.
j'utilise rows a la place de limit (interbase)
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,
et j'affecte moi même la valeur obtenu comme clé primaire à mon enregistrement maitre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT GEN_ID( "MON_GENERATEUR" , 1 ) FROM RDB$DATABASE
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
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
Si j'affecte moi même la valeur de ID_COMMANDE à l'insertion, et en cas de roolback est-ce correct de faire
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
afin de ne pas perdre de position de l'auto-incrément de ma clé primaire ?SELECT GEN_ID( "MON_GENERATEUR" , -1 ) FROM RDB$DATABASE
Désolé mais je suis vraiment débutant![]()
Non , à mon avis ta proposition va modifier la valeur par contre :
ne modifie en rien la valeur du générateur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT GEN_ID( "MON_GENERATEUR" , 0 ) -1 FROM RDB$DATABASE
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) ,D11 (Alexandria)
SGBD : Firebird 2.5, 3, SQLite
générateurs Etats : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Ubuntu, Androïd
ç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 *****//
//********pour récupérer tous les enregistrement de la dernier date enregistre***********//
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT MAX(COLONNEDATE) as "DERNIER-DATE" from VOTRETABLE
//*******************//
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 :
//*******************//
//******POUR RECUPERE TOUTE LA LIGNE DE DERNIER ENREGESTREMENT ****//
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT MAX(ID_CLEPRIMAIRE) as "DERNIER_ID" from VOTRETABE
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)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager