Come farei qualcosa del genere?
Riga SELECT SQL DA tabella WHERE id = max (id)
Come farei qualcosa del genere?
Riga SELECT SQL DA tabella WHERE id = max (id)
Risposte:
È possibile utilizzare una sottoselezione:
SELECT row
FROM table
WHERE id=(
SELECT max(id) FROM table
)
Se il valore di max(id)
non è univoco, vengono restituite più righe.
Se vuoi solo una di queste righe, usa la risposta di @ MichaelMior,
SELECT row from table ORDER BY id DESC LIMIT 1
id
è solo una colonna in una tabella. Non vi è alcuna garanzia che i valori nella id
colonna debbano essere univoci.
id
non sia una chiave primaria o unica :) Dato il nome, c'è una ragionevole possibilità che lo sia. Vale anche la pena notare che, a seconda del DBMS in uso, l'approccio con la sottoselezione potrebbe essere molto meno efficiente.
id
potrebbe essere una chiave esterna, nel qual caso potrebbe non essere unica. Ho fatto alcuni benchmarking usando set profiling = 1; ...; show profiles
e sembra che le nostre soluzioni abbiano le stesse prestazioni usando MySQL. Per quanto ne so, sai quali DBMS ha prestazioni più scarse per le sottoselezioni?
Potresti anche fare
SELECT row FROM table ORDER BY id DESC LIMIT 1;
Ciò ordinerà le righe in base al loro ID in ordine decrescente e restituirà la prima riga. Ciò equivale a restituire la riga con l'ID massimo. Questo ovviamente presuppone che id
sia unico tra tutte le righe. Altrimenti potrebbero esserci più righe con il valore massimo per id
e ne otterrai solo una.
SELECT *
FROM table
WHERE id = (SELECT MAX(id) FROM TABLE)
SELECT entry FROM table WHERE id = MAX(id)
non funzionerebbe ?!
SELECT entry_time FROM users_unverified WHERE num_id = (SELECT MAX(num_id) FROM users_unverified WHERE account_email = :account_email)
per cui ho solo bisogno entry_time
della voce più recente nel database. SELECT entry_time FROM users_unverified WHERE num_id = (SELECT MAX(num_id) FROM users_unverified) AND account_email = :account_email
Non puoi dare order by
perché order by
esegue una "scansione completa" su una tabella.
La seguente query è migliore:
SELECT * FROM table WHERE id = (SELECT MAX(id) FROM table);
ORDER BY
non eseguirà una scansione completa se si presume che id
sia la chiave primaria della tabella. (E se non lo è, ha un nome piuttosto scadente.) In caso contrario, come ti aspetti MAX(id)
di lavorare senza una scansione completa della tabella? Se non è presente alcun indice, è necessario verificare ogni valore per trovare il massimo.
Si può sempre andare anche per le funzioni analitiche che ti daranno un maggiore controllo
select tmp.row from ( select row, rank() over(partition by id order by id desc ) as rnk from table) tmp where tmp.rnk=1
Se hai problemi con la funzione rank () a seconda del tipo di dati, puoi scegliere anche da row_number () o dense_rank ().
Prova con questo
SELECT top 1 id, Col2, row_number() over (order by id desc) FROM Table