SQL で 10 行に 1 個ずつデータを取得したい
何を言ってんだ?って感じですが時系列に記録されているデータの場合そういうこともあると思います、今あった。
colum | type | 用途 |
---|---|---|
body | STRING | JSON がドカッと入ってる |
created_at | NUMBER | 作成日時が入っている |
こんな雑なテーブルがあるとする。で、これにたいして created_at で並べたのにたいして 10 行に 1 個合計 50 行取得したい場合以下のようにすればよい。
select * from(
select
JSON_EXTRACT_SCALAR(body, '$.nanika.nanika[0].nanika') as nanika,
created_at,
ROW_NUMBER() OVER (ORDER BY created_at DESC) as number
from `garbage_table`
)
where MOD(number, 10) = 0
imit 50;
今必要に迫られて書いたのがだいたいこんなんだったんですがもっとシンプルに書けるかもしれない。
常識的に考えればこんなクエリ吐いたりすることなんてまずないんですが、常識が通じないシチュエーションはあるし、そういう時 BigQuery であればこんなクエリにたいしてもすばやく結果を返してくれる。よかったですね。