Selezionare l’ultima riga in MySQL

Come posso SELECT l’ultima riga in una tabella MySQL?

Sto INSERTing dati e ho bisogno di recuperare il valore di una colonna, dalla riga precedente.

C’è un auto_increment nella tabella.

Definire “ultima riga”. Quello con l’ID più alto? O più recentemente aggiunto quello?
Che cosa indica l’ultima riga c’È una auto_increment o DATETIME colonna della tabella?
Sì, c’è un auto_increment. Vorrei aggiunte più di recente.
Non c’è ultima riga di un set, come EboMike e OMG Pony detto. Cosa fareste se vi darei una borsa piena di palline e chiedo di darmi l’ultima palla?

OriginaleL’autore esqew | 2010-11-01

9 Replies
  1. 310

    Sì, c’è un auto_increment in là

    Se si desidera che l’ultima di tutte le righe nella tabella, quindi questo è finalmente il momento in cui MAX(id) è la risposta giusta! Tipo:

    SELECT fields FROM table ORDER BY id DESC LIMIT 1;
    stackoverflow.com/a/21683753/257319
    Ho paura che questo diventa lento se deve ordinare milioni di righe, non è vero?
    Ho appena finito questo più di 20m righe ed è stato molto veloce. Immagino che ci sia un qualche tipo di caso speciale per la gestione di questa query. (EDIT: MySQL 5.7, motore InnoDB)

    OriginaleL’autore Pekka 웃

  2. 24

    Tenere a mente che le tabelle di database relazionali sono solo insiemi di righe. E insiemi in matematica non ordinato collezioni. Non c’è prima o l’ultima riga; nessuna riga precedente o successiva riga.

    Dovrete ordinare il vostro set di unordered righe da alcuni prima il campo, e poi si è liberi l’scorrere il resultset in ordine definito.

    Dal momento che si dispone di un incremento automatico di campo, presumo che tu vuoi che sia il campo di ordinamento. In questo caso, è possibile eseguire le seguenti operazioni:

    SELECT    *
    FROM      your_table
    ORDER BY  your_auto_increment_field DESC
    LIMIT     1;

    Vedere come siamo primi ordinamento l’insieme non ordinato di righe da your_auto_increment_field (o quello che avete chiamato) in ordine decrescente. Poi ci limitare il resultset solo la prima riga con LIMIT 1.

    OriginaleL’autore Daniel Vassallo

  3. 20

    su tabelle con molte righe sono due query probabilmente più veloce…

    SELECT @last_id := MAX(id) FROM table;
    
    SELECT * FROM table WHERE id = @last_id;

    OriginaleL’autore spacepille

  4. 11

    È possibile combinare due query suggerita da @spacepille in singola query che assomiglia a questo:

    SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);

    Dovrebbe funzionare velocissimo, ma su tabelle INNODB è frazione di milisecond più lento di ORDINE+LIMITE.

    questa risposta è una copia di @karthikeyan ‘s answere… visto il post in ritardo…
    ha scritto la sua risposta, quattro giorni fa, e mi ha risposto questo a dicembre 2015.
    no, mi rivede e corregge alcune grafie 4 giorni fa… data di pubblicazione è il 2014 answered Jun 14 at 9:41 thats circa 1 anno e 6 mesi prima 🙂
    Giusto per chiarire l’aria qui vzr è giusto. ’14 Giu’ significa Giu 14, 2016 anche @karthikeyan è stato solo un membro per due mesi, a questo punto.
    Ssooo… @karthikeyan la risposta è una copia di questo!

    OriginaleL’autore vzr

  5. 4

    Se si desidera che le aggiunte più di recente, aggiungere un timestamp e selezionare l’ordine in ordine inverso, dal più alto timestamp, limite 1. Se si vuole andare in ID, ordina per ID. Se si desidera utilizzare quello che avete APPENA aggiunto, utilizzare mysql_insert_id.

    OriginaleL’autore EboMike

  6. 2
    SELECT * FROM adds where id=(select max(id) from adds);

    Questa query utilizzata per recuperare l’ultimo record di una tabella.

    OriginaleL’autore karthikeyan

  7. -1

    È possibile utilizzare un OFFSET in un LIMIT comando:

    SELECT * FROM aTable LIMIT 1 OFFSET 99

    nel caso di una tabella di 100 righe di questo ritorno l’ultima riga senza fare affidamento su una primary_key

    OriginaleL’autore Benvorth

  8. -1

    Quasi ogni tabella del database, c’è una colonna auto_increment(generalmente id )

    Se si desidera che l’ultima di tutte le righe nella tabella,

    SELECT columns FROM table ORDER BY id DESC LIMIT 1;

    O

    È possibile combinare due query in query che assomiglia a questo:

    SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);

    OriginaleL’autore Sani Kamal

Lascia un commento