Bagaimana saya melakukan sesuatu seperti ini?
SQL SELECT baris DARI tabel DI MANA id = maks (id)
Bagaimana saya melakukan sesuatu seperti ini?
SQL SELECT baris DARI tabel DI MANA id = maks (id)
Jawaban:
Anda dapat menggunakan subselect:
SELECT row
FROM table
WHERE id=(
SELECT max(id) FROM table
)
Perhatikan bahwa jika nilai max(id)
tidak unik, beberapa baris dikembalikan.
Jika Anda hanya menginginkan satu baris seperti itu, gunakan jawaban @ MichaelMior,
SELECT row from table ORDER BY id DESC LIMIT 1
id
hanya sebuah kolom dalam sebuah tabel. Tidak ada jaminan bahwa nilai-nilai dalam id
kolom harus unik.
id
bukan kunci primer atau unik :) Diberi nama, ada kemungkinan masuk akal. Perlu juga dicatat bahwa tergantung pada DBMS yang Anda gunakan, pendekatan dengan subselect mungkin jauh lebih efisien.
id
bisa berupa kunci asing, dalam hal ini mungkin tidak unik. Saya melakukan beberapa pembandingan menggunakan set profiling = 1; ...; show profiles
dan tampaknya solusi kami memiliki kinerja yang sama menggunakan MySQL. Untuk pengetahuan saya sendiri, apakah Anda tahu DBMS memiliki kinerja yang lebih buruk untuk subselect?
Anda juga bisa melakukannya
SELECT row FROM table ORDER BY id DESC LIMIT 1;
Ini akan mengurutkan baris berdasarkan ID mereka dalam urutan menurun dan mengembalikan baris pertama. Ini sama dengan mengembalikan baris dengan ID maksimum. Ini tentu saja mengasumsikan ituid
unik di antara semua baris. Kalau tidak, mungkin ada beberapa baris dengan nilai maksimum untuk id
dan Anda hanya akan mendapatkannya.
SELECT *
FROM table
WHERE id = (SELECT MAX(id) FROM TABLE)
SELECT entry FROM table WHERE id = MAX(id)
tidak akan berhasil ?!
SELECT entry_time FROM users_unverified WHERE num_id = (SELECT MAX(num_id) FROM users_unverified WHERE account_email = :account_email)
mana saya hanya memerlukan entry_time
entri terbaru dalam database. Apakah pernyataan itu mencukupi atau seharusnya:SELECT entry_time FROM users_unverified WHERE num_id = (SELECT MAX(num_id) FROM users_unverified) AND account_email = :account_email
Anda tidak dapat memberi order by
karena order by
melakukan "pemindaian penuh" di atas meja.
Permintaan berikut ini lebih baik:
SELECT * FROM table WHERE id = (SELECT MAX(id) FROM table);
ORDER BY
tidak akan melakukan pemindaian penuh jika Anda menganggap itu id
adalah kunci utama tabel. (Dan jika tidak, namanya agak buruk.) Jika tidak, bagaimana Anda berharap MAX(id)
untuk bekerja tanpa pemindaian tabel penuh? Jika tidak ada indeks, setiap nilai masih harus diperiksa untuk menemukan maksimum.
Satu selalu dapat pergi untuk fungsi analitis juga yang akan memberi Anda lebih banyak kontrol
select tmp.row from ( select row, rank() over(partition by id order by id desc ) as rnk from table) tmp where tmp.rnk=1
Jika Anda menghadapi masalah dengan fungsi rank () tergantung pada tipe data, maka seseorang dapat memilih dari row_number () atau dense_rank () juga.
Coba dengan ini
SELECT top 1 id, Col2, row_number() over (order by id desc) FROM Table