Как рекурсивно перебрать элементы таблицы и из их значения сформировать новую таблицу?

Есть таблица:

 ________________________
|id |value|timestamp     |
 ________________________
| 0 |  3  |time and date |
 ________________________
| 1 | 40  |time and date | 

Необходимо сформировать из нее новую, беря каждый id и выводя 1 и время +1сек value раз.

То есть, если значение value =3, тогда в выводимую таблицы добавить

_____________________
|1 |time and date+1 |
_____________________
|1 |time and date+2 |
_____________________
|1 |time and date+3 |

Так поступить со всеми элементами id и в результате сформировать одну таблицу.

Кодом это выглядело бы примерно так:

for($i=0;$i<max(id);$i++){
    for ($y=0;$y<value[id];$y){
       echo 1,"time and date"+$y
   }
} 

Как такое можно реализовать?


Ответы (1 шт):

Автор решения: nörbörnën
select id, timestamp + (generate_series || 's')::interval
  from tablename cross join generate_series(1, ?)
    where id = ?; 

with s as(
  select generate_series(1, ?) as s
)
select t.id, t.timestamp + (s.s || 's')::interval
  from tablename t, s
    where t.id = ?;

 ?column? |      ?column?       
----------+---------------------
        1 | 2019-05-28 12:45:01
        1 | 2019-05-28 12:45:02
        1 | 2019-05-28 12:45:03
        1 | 2019-05-28 12:45:04
        1 | 2019-05-28 12:45:05
(5 rows)
→ Ссылка