Vous pouvez utiliser dense_rank()
et arithmétique pour mettre les lignes par groupes de 3 :
select b.*,
ceiling(dense_rank() over (order by id) / 3)
from bibles b
La question est alors de savoir comment obtenir les dates. D'après votre exemple, cela pourrait être :
select b.*,
'2020-02-23' + interval ( ceiling(dense_rank() over (order by id) / 3) - 1) day
from bibles b;
Cependant, le - 1
dépend de ce que la première ligne est dans le jeu de résultats. Si vous voulez qu'il commence à 365, alors :
select b.*,
'2020-02-23' + interval ( ceiling(dense_rank() over (order by id) / 3) - 1) day
from bibles b
where id >= 365;