普通にrow_number()つかえよ
いやいや、世の中にはrow_numberだけで解決できない情報もあるのよ。。。
例えば、以下みたいな問い合わせがあったとして。。。
問い合わせ日と区分と内容がカラムとしてある問い合わせテーブルがあったとして、
◯日~◯日までの集計結果が出したい【ただし、日付の抜けは無しで】
当然、問い合わせが毎日来てるような、ステキなシステムなら単純にSELECTしてあげればいいですが、
土日は絶対来ないとかそもそもそんな使われてないので問い合わせなんか全然来ないみたいなシステムの時に、
【対象期間の全日付を出すって何だよ??】みたいな感じになるかと。。。
そんな時に役に立つのが【コロン】ですよ
要は変数を使うということですね。
※前提条件として、レコードがある程度有るテーブルを用意する必要があります(少なくともほしい連番数分ぐらい
連番を取ってくるSQL
まずは連番(0️~)を取ってくるやつ
連番、ゲットだぜ
select
test.num
from
(
select
0 as num -- 開始番号
from
dual
where
@num := -1 -- 開始番号 -1したやつ
union
select
@num := @num + 1 as num
from
`information_schema`.columns -- ここにレコードの多いテーブルを指定
where
@num < 20 -- ここの数字を連番の最後の番号にする(コレだと0~20まで)
) test
@numって変数を最初のSQLで生成して、unionしたSQLで@numをインクリしていくような感じです。
インクリするためにレコードがある程度入ってるテーブルが必要なので、
今回はスキーマ情報が入ってるシステムテーブルを使って取得しました。
派生させて〇〇日~〇〇日まで
開始日から終了日までの連番を取得して、その結果をdate_addでドンドン足していくよ
日付レコード生成だぜ
select
date_add(str_to_date('20240101', '%Y%m%d'), interval test.num day) -- 開始日
from
(
select
0 as num
from
dual
where
@num := -1
union
select
@num := @num + 1 as num
from
`information_schema`.columns
where
date_add(str_to_date('20240101', '%Y%m%d'), interval @num day) < -- 開始日
str_to_date('20240705', '%Y%m%d') -- 終了日
) test
他に何に使える?
パッと思いついたやつだと、
番号を持つテーブルのデータを物理削除していた場合に、何番のデータが存在しないの?とかの抜け番探しとかに使えるかもね。