Précédent   Forum des professionnels en informatique > Bases de données > Autres SGBD > InterBase
InterBase Forum d'entraide sur le SGBD InterBase de Codegear. Avant de poster -> F.A.Q Interbase, Tutoriels
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/09/2008, 20h52   #1
Invité régulier
 
Inscription : mai 2008
Messages : 31
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 31
Points : 5
Points : 5
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
taze1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 00h35   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 034
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 034
Points : 18 324
Points : 18 324
Envoyer un message via MSN à CinePhil
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.
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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 09h28   #3
Membre éprouvé
 
Avatar de elbj
 
Inscription : novembre 2004
Messages : 341
Détails du profil
Informations personnelles :
Âge : 38
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : novembre 2004
Messages : 341
Points : 422
Points : 422
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.

Aide toi et www.developpez.com t'aidera !
Le Soleil se lève pour celui qui va à sa rencontre !
Le meilleurs moyen de prévoir le futur est encore de le créer !
elbj est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 12h39   #4
Membre chevronné
 
Avatar de cavo789
 
Homme Christophe Avonture
Développeur Web
Inscription : mai 2004
Messages : 649
Détails du profil
Informations personnelles :
Nom : Homme Christophe Avonture
Âge : 37
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2004
Messages : 649
Points : 774
Points : 774
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 l'extension AllEvents, gestionnaire d'évènements pour Joomla
http://avonture.be/allevents - https://www.facebook.com/com.allevents - http://twitter.com/#!/avonture
cavo789 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 18h24   #5
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
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 : 10 959
Points : 17 792
Points : 17 792
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 * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2008, 20h58   #6
Invité régulier
 
Inscription : mai 2008
Messages : 31
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 31
Points : 5
Points : 5
et comment faire pour recuperer l'avant dernier enregistrement inserer ?
merci pour vos repenses
taze1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2008, 08h13   #7
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 034
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 034
Points : 18 324
Points : 18 324
Envoyer un message via MSN à CinePhil
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.
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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2008, 17h16   #8
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 455
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
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 : 4 455
Points : 7 580
Points : 7 580
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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2008, 00h00   #9
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
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 SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2008, 13h56   #10
Invité régulier
 
Inscription : mai 2008
Messages : 31
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 31
Points : 5
Points : 5
j'utilise rows a la place de limit (interbase)
taze1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2008, 11h27   #11
Membre confirmé
 
Inscription : juin 2002
Messages : 240
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 240
Points : 225
Points : 225
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
vanquish est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2009, 12h41   #12
Futur Membre du Club
 
Med Ali Meziane
Inscription : juillet 2006
Messages : 40
Détails du profil
Informations personnelles :
Nom : Med Ali Meziane
Âge : 47
Localisation : Tunisie

Informations forums :
Inscription : juillet 2006
Messages : 40
Points : 19
Points : 19
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
Citation:
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
mameziane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2009, 09h53   #13
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 634
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 3 634
Points : 4 537
Points : 4 537
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
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h36.


 
 
 
 
Partenaires

Hébergement Web