2017-06-04 47 views
0

Postgresql!postgresql中的generate_series表中的字段

我有一個表 「會議」

create table meeting (
id SERIAL, 
name varchar, 
date_start timestamp not null, 
period interval default '0:0:0'); 

和一些數據

select * from meeting; 
+----+---------------+---------------------+--------+ 
| id |  name  |  date_start  | period | 
+----+---------------+---------------------+--------+ 
| 1 | Måndagsmöte | 2017-06-06 09:00:00 | 7 days | 
| 2 | torsdagssoppa | 2017-06-01 00:00:00 | 7 days | 
+----+---------------+---------------------+--------+ 

而且可以選擇從正在添加此會議;

select id,name, date from meeting, 
generate_series( 
(select date_start::timestamptz from meeting where id=1)::timestamp, 
'2017-08-01 00:00:00', (select period from meeting where id=1)) as date 
where date > '2017-06-15 00:00:00' 
and date < '2017-07-20 00:00:00' and id=1; 

+----+-------------+---------------------+ 
| id | name  |  date   | 
+----+-------------+---------------------+ 
| 1 | Måndagsmöte | 2017-06-20 09:00:00 | 
| 1 | Måndagsmöte | 2017-06-27 09:00:00 | 
| 1 | Måndagsmöte | 2017-07-04 09:00:00 | 
| 1 | Måndagsmöte | 2017-07-11 09:00:00 | 
| 1 | Måndagsmöte | 2017-07-18 09:00:00 | 
+----+-------------+---------------------+ 

是否有任何可能性來放鬆「id = 1」,併爲所有名稱召開所有會議?

/GH

回答

0

根據你的數據,你可以使用一個查詢:

select * 
from (select id, 
      name, 
      generate_series(date_start, '2017-08-01 00:00:00', period) date 
     from meeting) mt 
where mt.date > '2017-06-15 00:00:00' 
and mt.date < '2017-07-20 00:00:00' 
 
id | name   | date    
-: | :------------ | :------------------ 
1 | Måndagsmöte | 2017-06-20 09:00:00 
1 | Måndagsmöte | 2017-06-27 09:00:00 
1 | Måndagsmöte | 2017-07-04 09:00:00 
1 | Måndagsmöte | 2017-07-11 09:00:00 
1 | Måndagsmöte | 2017-07-18 09:00:00 
2 | torsdagssoppa | 2017-06-22 00:00:00 
2 | torsdagssoppa | 2017-06-29 00:00:00 
2 | torsdagssoppa | 2017-07-06 00:00:00 
2 | torsdagssoppa | 2017-07-13 00:00:00 

dbfiddle here

+0

坦克!我也應該在表格中有一個date_end ... – gorhas

相關問題