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.

2voto

Pow-Ian Points 2677

Si votre tableau n'a pas de valeur auto-incrémentée et n'a pas d'autre élément sur lequel il est possible d'ordonner, vous pouvez obtenir l'ordre arbitraire des éléments de n'importe quelle collection de la manière suivante

SELECT
    [item]
FROM (
    SELECT
        *
        , ROW_NUMBER() OVER(PARTITION BY 1 ORDER BY GETDATE()) 'RN'
    FROM [TABLE]
) RDR 
WHERE [RN] = (
    SELECT
        MAX([RN])
    FROM (
        SELECT
            *
            , ROW_NUMBER() OVER(PARTITION BY 1 ORDER BY GETDATE()) 'RN'
        FROM [TABLE]
    ) RDR 
)

Une mise en garde importante s'impose : les performances de ce système seront catastrophiques pour les grands ensembles de données.

0voto

GeeDee Points 11

Dans Oracle, vous pouvez le faire :

SELECT *
FROM (SELECT EMP.*,ROWNUM FROM EMP ORDER BY ROWNUM DESC)
WHERE ROWNUM=1;

C'est l'un des moyens possibles.

0voto

Panjas51 Points 1
select ADU.itemid, ADU.startdate, internalcostprice 
from ADUITEMINTERNALCOSTPRICE ADU

right join

   (select max(STARTDATE) as Max_date, itemid 
   from ADUITEMINTERNALCOSTPRICE
   group by itemid) as A

on A.ITEMID = ADU.ITEMID
and startdate= Max_date

-1voto

Je pense que ça devrait le faire.

declare @x int;
select @x = max(id) from table_name;
select * from where id = @x;

-2voto

Hani Charara Points 1
$sql="SELECT tot_visit FROM visitors WHERE date = DATE(NOW()) - 1 into @s                
$conn->query($sql);
$sql = "INSERT INTO visitors (nbvisit_day,date,tot_visit) VALUES (1,CURRENT_DATE,@s+1)";
$conn->query($sql);

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