Você pode usar
dense_rank()
e aritmética para colocar as linhas em grupos de 3:select b.*,
ceiling(dense_rank() over (order by id) / 3)
from bibles b
A questão é então como obter as datas. Com base no seu exemplo, isso pode ser:
select b.*,
'2020-02-23' + interval ( ceiling(dense_rank() over (order by id) / 3) - 1) day
from bibles b;
No entanto, o
- 1
depende de qual é a primeira linha no conjunto de resultados. Se você quiser que comece em 365, então:select b.*,
'2020-02-23' + interval ( ceiling(dense_rank() over (order by id) / 3) - 1) day
from bibles b
where id >= 365;