クエリの結果が帰ってこなくて暇なのでWITH RECURSIVE
なる再帰を知ったので暇つぶしに試してみました。
PostgreSQLでしか試していないですが他のRDBMSでも使えるんじゃあないでしょうか。(WITH RECURSIVE
句がサポートされていれば)
クエリは下記
WITH RECURSIVE fibonacci(a, b, c) AS (
SELECT
1, 1, 0
UNION ALL
SELECT
a + b,
CASE
WHEN a = 1 THEN 1
ELSE b + c
END,
a - c
FROM fibonacci
WHERE c < 50
)
SELECT c FROM fibonacci
次のような結果が得られました。
0
1
1
2
3
5
8
13
21
34
55
やったっ!
GENERATE_SERIES
使ってみたりだとか、LAG
だとか色々試した結果できなくてCASE
に頼ってしまいました。
再帰の中では集約関数も使えないんですね。
もっといいやり方あれば教えて下さい。