Come selezionare l'ultimo record di una tabella in SQL?


133

Questo è un codice di esempio per selezionare tutti i record da una tabella. Qualcuno può mostrarmi come selezionare l'ultimo record di quella tabella?

select * from table

Quando uso: SELECT * FROM TABLE ORDER BY ID DESC LIMIT ottengo questo errore: Riga 1: sintassi errata vicino a "LIMIT". Questo è il codice che uso:

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());
    }
}

Bene, devi ordinare qualcosa. Hai una chiave primaria? Forse un documento d'identità?
alexn

Cosa intendi con "ultimo record"? Con il valore più alto della colonna chiave primaria?
Marcin Wroblewski,

Risposte:


337

Senza ulteriori informazioni, quale Database ecc. Il meglio che possiamo fare è qualcosa di simile

Server SQL

SELECT TOP 1 * FROM Table ORDER BY ID DESC

MySql

SELECT * FROM Table ORDER BY ID DESC LIMIT 1

1
top 1 prenderà il primo, no?
Tassisto

30
Sì, ma è per questo che ordini per DESC
Adriaan Stander il

3
Ma se hai usato l'ordine di DESC per un milione di record, questo rallenterà la tua domanda @AdriaanStander
Charles Hernandez,

1
Quello mysql funziona anche con il server sql. È un comando sql generico.
Azhar22k,

1
@ itz-azhar: il modulo MySQL di questa query non è un comando SQL generico; la LIMITparola chiave è un'estensione di SQL implementata solo da alcuni RDBMS; in particolare, Oracle non ha una LIMITparola chiave
landru27

23

Supponendo che tu abbia una colonna Id:

SELECT TOP 1 *
  FROM table
 ORDER
    BY Id DESC;

Inoltre, funzionerà su SQL Server. Penso che MySQL potrebbe essere necessario utilizzare:

SELECT *
  FROM table
 ORDER
    BY Id DESC
 LIMIT 1

Ma non ne sono sicuro al 100%.

MODIFICARE

Guardando le altre risposte, ora sono sicuro al 100% di essere corretto con l'istruzione MySQL: o)

MODIFICARE

Ho appena visto il tuo ultimo commento. Potresti fare:

SELECT MAX(Id)
  FROM table

Questo ti darà il numero ID più alto.


2
SELEZIONA MAX (id) DA dati Funziona perfettamente!
Ricardo Fercher,

15

per ottenere l'ultima riga di un database SQL utilizzare questa stringa sql:

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

Produzione:

Ultima riga del tuo db!


3
Funziona perfettamente anche con Oracle ed è più veloce
dell'ordinamento

Questo è il migliore. Nessun ordinamento, nessuna "TOP 1", solo query supportate e performanti. Perfetto.
Matt F.

7
SELECT * FROM TABLE ORDER BY ID DESC LIMIT 1

Sì, questo è mysql, SQL Server:

SELECT TOP 1 * FROM Table ORDER BY ID DESC

questo dà un errore! Pensavo che questo fosse SQL ma è MySQL
Tassisto

1
Modificato su SQL Server, tuttavia non è stato specificato il DBMS nella domanda.
Simon

3
SELECT * FROM table ORDER BY Id DESC LIMIT 1

2

L'ultimo è solo il primo quando si inverte l'ordine.


1

È sempre buona norma progettare una tabella con un identificatore di riga automatico, ad esempio

 [RowID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL

, quindi puoi identificare l'ultima riga di

 select * from yourTable where rowID =  @@IDENTITY 

Questo è un bel trucco, per i record 2M + è super veloce (almeno nel mio caso) Grazie
Jeancarlo Fontalvo

0

In Oracle, puoi fare:

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

Questo è uno dei modi possibili.


0
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

1
Benvenuto in StackOverflow. Oltre alla risposta fornita, ti consigliamo di fornire una breve spiegazione del perché e di come risolvere il problema.
jtate

0

Penso che questo dovrebbe farlo.

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

0

Se hai un campo auto-incrementante (diciamo ID), puoi fare qualcosa del tipo: SELECT * FROM foo WHERE ID = (SELECT max(ID) FROM foo)


-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);

hai letto attentamente la domanda? come si INSERTcollega un nuovo valore a "come selezionare l'ultimo record di quella tabella"?
landru27,

2
Benvenuto in Stack Overflow! Grazie per lo snippet di codice, che potrebbe fornire un aiuto limitato e immediato. Una spiegazione adeguata migliorerebbe notevolmente il suo valore a lungo termine descrivendo perché questa è una buona soluzione al problema e la renderebbe più utile ai futuri lettori con altre domande simili. Modifica la tua risposta per aggiungere alcune spiegazioni, inclusi i presupposti che hai formulato.
sepehr,

Non scrivere codice specifico php quando OP ha chiesto solo il linguaggio SQL.
Steve Moretz,


-1

Ho votato Ricardo. In realtà, max è molto più efficiente dell'ordinamento. Vedi le differenze. è eccellente.

Ho dovuto ottenere l'ultimo record di riga / aggiornamento (timeStamp)

`sqlite> select timeStamp from mypadatav2 order by timeStamp desc limit 1;
 2020-03-11 23:55:00
 Run Time: real 1.806 user 1.689242 sys 0.117062`

`sqlite> select max(timeStamp) from mypadatav2;
 2020-03-11 23:55:00
 Run Time: real 0.553 user 0.412618 sys 0.134340`
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.