Puoi usare dense_rank()
e aritmetica per mettere le righe in gruppi di 3:
select b.*,
ceiling(dense_rank() over (order by id) / 3)
from bibles b
La domanda è quindi come ottenere le date. Sulla base del tuo esempio, questo potrebbe essere:
select b.*,
'2020-02-23' + interval ( ceiling(dense_rank() over (order by id) / 3) - 1) day
from bibles b;
Tuttavia, il - 1
dipende da quale sia la prima riga nel set di risultati. Se vuoi che inizi a 365, allora:
select b.*,
'2020-02-23' + interval ( ceiling(dense_rank() over (order by id) / 3) - 1) day
from bibles b
where id >= 365;