Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

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

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 */