回答:
あなたは副選択を使うことができます:
SELECT row
FROM table
WHERE id=(
SELECT max(id) FROM table
)
の値がmax(id)一意でない場合、複数の行が返されることに注意してください。
そのような行が1つだけ必要な場合は、@ MichaelMiorの回答を使用します。
SELECT row from table ORDER BY id DESC LIMIT 1
idテーブル内の単なる列です。id列の値が一意である必要があるという保証はありません。
idこれが主キーでも一意のキーでもないと仮定します:)名前を考えると、それが妥当な可能性があります。また、使用しているDBMSによっては、副選択を使用したアプローチでは効率が大幅に低下する可能性があることにも注意してください。
id外部キーの可能性があります。その場合、一意ではない可能性があります。私はいくつかのベンチマークを使用set profiling = 1; ...; show profilesして実行しましたが、MySQLを使用しても私たちのソリューションは同じパフォーマンスを持っているようです。私自身の知識として、どのDBMSの副選択のパフォーマンスが悪いか知っていますか?
あなたもすることができます
SELECT row FROM table ORDER BY id DESC LIMIT 1;
これにより、IDで行が降順にソートされ、最初の行が返されます。これは、最大のIDを持つ行を返すのと同じです。もちろん、これはidすべての行で一意であることを前提としています。それ以外の場合、最大値を持つ複数の行が存在する可能性があり、id1つしか取得できません。
SELECT *
FROM table
WHERE id = (SELECT MAX(id) FROM TABLE)
SELECT entry FROM table WHERE id = MAX(id)は動作しませんか?!
SELECT entry_time FROM users_unverified WHERE num_id = (SELECT MAX(num_id) FROM users_unverified WHERE account_email = :account_email)必要とするだけですentry_time。その文は十分であるか、それは次のようになりますSELECT entry_time FROM users_unverified WHERE num_id = (SELECT MAX(num_id) FROM users_unverified) AND account_email = :account_email
テーブルを「フルスキャン」するので与えorder byられorder byません。
次のクエリの方が優れています。
SELECT * FROM table WHERE id = (SELECT MAX(id) FROM table);
ORDER BYこれがidテーブルの主キーであると想定した場合、フルスキャンは実行されません。(そうでない場合は、名前が貧弱です。)そうでない場合MAX(id)、全表スキャンなしでどのように機能するでしょうか。インデックスがない場合でも、最大値を見つけるためにすべての値をチェックする必要があります。
これでお試しください
SELECT top 1 id, Col2, row_number() over (order by id desc) FROM Table
分析機能もいつでも利用でき、より多くの制御が可能になります
select tmp.row from ( select row, rank() over(partition by id order by id desc ) as rnk from table) tmp where tmp.rnk=1
データのタイプに応じてrank()関数で問題が発生した場合は、row_number()または稠密ランク()から選択することもできます。