221 votes

Comment sélectionner le dernier enregistrement d'une table en SQL ?

Voici un exemple de code pour sélectionner tous les enregistrements d'un tableau. Quelqu'un peut-il me montrer comment sélectionner le dernier enregistrement de ce tableau ?

select * from table

Quand je l'utilise : SELECT * FROM TABLE ORDER BY ID DESC LIMIT J'obtiens cette erreur : Ligne 1 : syntaxe incorrecte près de 'LIMIT'. Voici le code que j'utilise :

private void LastRecord()
{
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["HELPDESK_OUTLOOKConnectionString3"].ToString());

    conn.Open();
    SqlDataReader myReader = null;
    SqlCommand myCommand = new SqlCommand("SELECT * FROM HD_AANVRAGEN ORDER BY " +
                "aanvraag_id DESC LIMIT 1", conn);
    myReader = myCommand.ExecuteReader();
    while (myReader.Read())
    {
        TextBox1.Text = (myReader["aanvraag_id"].ToString());
        TextBox1.Text += (myReader["wijziging_nummer"].ToString());
        TextBox1.Text += (myReader["melding_id"].ToString());
        TextBox1.Text += (myReader["aanvraag_titel"].ToString());
        TextBox1.Text += (myReader["aanvraag_omschrijving"].ToString());
        TextBox1.Text += (myReader["doorlooptijd_id"].ToString());
        TextBox1.Text += (myReader["rapporteren"].ToString());
        TextBox1.Text += (myReader["werknemer_id"].ToString());
        TextBox1.Text += (myReader["outlook_id"].ToString());
    }
}

0 votes

Eh bien, il faut commander quelque chose. Avez-vous une clé primaire ? Peut-être un ID ?

0 votes

Que voulez-vous dire par "dernier enregistrement" ? Avec la plus haute valeur de la colonne clé primaire ?

1 votes

2011, c'était il y a de nombreuses années. Aujourd'hui, vous devriez utiliser offset 0 rows fetch first 1 row only - car il est conforme à la norme ANSI SQL et fonctionne avec la plupart des bases de données modernes.

510voto

astander Points 83138

Sans aucune autre information, quelle base de données etc. le mieux que l'on puisse faire est quelque chose comme

Serveur Sql

SELECT TOP 1 * FROM Table ORDER BY ID DESC

MySql

SELECT * FROM Table ORDER BY ID DESC LIMIT 1

3 votes

Le top 1 prendra le premier, non ?

56 votes

Oui, mais c'est pour cela que vous commandez par DESC

5 votes

Mais si vous utilisez order by DESC pour un million d'enregistrements, cela ralentira votre requête @AdriaanStander

72voto

Ricardo Fercher Points 187

Pour obtenir le dernier rangée d'un Base de données SQL utilisez cette chaîne sql :

SELECT * FROM TableName WHERE id=(SELECT max(id) FROM TableName);

Sortie :

Dernière ligne de votre db !

7 votes

Cela fonctionne parfaitement avec oracle aussi et c'est plus rapide que de trier.

27voto

Neil Knight Points 23759

En supposant que vous avez une colonne Id :

SELECT TOP 1 *
  FROM table
 ORDER
    BY Id DESC;

De plus, cela fonctionnera sur SQL Server. Je pense que vous devrez utiliser MySQL :

SELECT *
  FROM table
 ORDER
    BY Id DESC
 LIMIT 1

Mais, je ne suis pas sûr à 100% de ça.

EDIT

En regardant les autres réponses, je suis maintenant sûr à 100% que je suis correct avec la déclaration MySQL :o)

EDIT

Je viens de voir votre dernier commentaire. Tu pourrais le faire :

SELECT MAX(Id)
  FROM table

Vous obtiendrez ainsi le numéro d'identification le plus élevé.

18voto

Simon Points 4019
SELECT * FROM TABLE ORDER BY ID DESC LIMIT 1

Oui, c'est mysql, SQL Server :

SELECT TOP 1 * FROM Table ORDER BY ID DESC

0 votes

Cela donne une erreur ! Je pensais que c'était SQL mais c'est MySQL.

2 votes

Modifié pour SQL Server, cependant vous n'avez pas spécifié votre SGBD dans la question.

11voto

jarlh Points 27458

MS SQL Server a supporté ANSI SQL FETCH FIRST depuis de nombreuses années :

SELECT * FROM TABLE
ORDER BY ID DESC 
OFFSET 0 ROWS FETCH FIRST 1 ROW ONLY

(Fonctionne avec la plupart des bases de données modernes).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X