add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
Help with an interesting Postgres question: Why isn't an Index Only Scan used on a partition accessed via the parent table?.
with recursive data as (
select
n as len,
(20 - n * (n + 1) / 2) / n + 1 as range,
floor((sqrt(8 * 20 + 1) - 1) / 2)::int as maxlen
from generate_series(2, floor((sqrt(8 * 20 + 1) - 1) / 2)::int) n
), candidates as (
select ofs + 1 s, ofs + len e,
row_number() over (partition by ofs order by len desc) as rnk
from data cross join generate_series(0, (select max(range) - 1 from data)) ofs
/* last second half of the condition eliminates some un-useful series up front */
where ofs < range and (len = maxlen or ofs >= maxlen)
and 20 - (ofs + 1 + (len - 1) / 2::float) * len < ofs + len + 1
), chain as (
select * from candidates where s = 1
union all
select rc.* from chain c inner join candidates rc on rc.s = c.e + 1
)
select s, least(e, 100) as e from chain where s <= 100
union all
select n, n from generate_series((select max(e) + 1 from chain), 100) n
order by s;
s e
1 5
6 7
8 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
31 31
32 32
33 33
34 34
35 35
36 36
37 37
38 38
39 39
40 40
41 41
42 42
43 43
44 44
45 45
46 46
47 47
48 48
49 49
50 50
51 51
52 52
53 53
54 54
55 55
56 56
57 57
58 58
59 59
60 60
61 61
62 62
63 63
64 64
65 65
66 66
67 67
68 68
69 69
70 70
71 71
72 72
73 73
74 74
75 75
76 76
77 77
78 78
79 79
80 80
81 81
82 82
83 83
84 84
85 85
86 86
87 87
88 88
89 89
90 90
91 91
92 92
93 93
94 94
95 95
96 96
97 97
98 98
99 99
100 100
SELECT 94