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)
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
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.
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 +
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
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
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
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
ç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)
Partager