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 idcolonna debbano essere univoci.
idnon 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.
idpotrebbe essere una chiave esterna, nel qual caso potrebbe non essere unica. Ho fatto alcuni benchmarking usando set profiling = 1; ...; show profilese 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 idsia unico tra tutte le righe. Altrimenti potrebbero esserci più righe con il valore massimo per ide 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_timedella 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 byperché order byesegue una "scansione completa" su una tabella.
La seguente query è migliore:
SELECT * FROM table WHERE id = (SELECT MAX(id) FROM table);
ORDER BYnon eseguirà una scansione completa se si presume che idsia 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