読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

SQLiteでFIRSTやLASTみたいな事を実現する

sql

SQLiteには、FIRSTやLASTに相当する構文はありません。
内部的に印加されるrowidというデータをソートして、LIMITで一個だけ採ってきます。

select rowid,body,date from blog order by rowid desc limit 1;
/* 5|it is a fine today.|2016-09-15 */

実際のところ

こんなDBがあったとします。

select * from blog;
/*
my first blog post.|2016-09-14
my second blog post.|2016-09-16
my first blog post.|2016-09-16
it is a fine today.|2016-09-15
*/

これについて、デフォで設定される通し番号rowidを印加すると、こんな感じ。

select rowid, body, date from blog;
/*
1|my first blog post.|2016-09-14
3|my second blog post.|2016-09-16
4|my first blog post.|2016-09-16
5|it is a fine today.|2016-09-15
*/

これを活かして、FIRSTならasc、LASTならdescで並べ替え、LIMIT 1で取り出します。

select rowid,body,date from blog order by rowid desc limit 1;
/* 5|it is a fine today.|2016-09-15 */
select rowid,body,date from blog order by rowid asc limit 1;
/* 1|my first blog post.|2016-09-14 */