好的,我碰到this有關的問題,但它與我的情況稍有不同。PostgreSQL:如何基於相同的開始和結束時間(不帶時區的時間戳)加入兩個表?
問題
我有兩個同類型的表在我的PostgreSQL數據庫9.5和tbl1
都tbl2
含1,274 rows
。的table 1
的結構和佈局是如下:
表1:
id (integer) start_time end_time my_val1 (numeric)
51 1994-09-26 16:50:00 1994-10-29 13:30:00 3.7
52 1994-10-29 13:30:00 1994-11-27 12:30:00 2.4
53 1994-11-27 12:30:00 1994-12-29 09:25:00 7.6
54 1994-12-29 09:25:00 1994-12-31 23:59:59 2.9
54 1995-01-01 00:00:00 1995-02-05 13:50:00 2.9
55 1995-02-05 13:50:00 1995-03-12 11:10:00 1.6
56 1995-03-12 11:10:00 1995-04-11 09:05:00 2.2
171 1994-10-29 16:15:00 1994-11-27 19:10:00 6.9
172 1994-11-27 19:10:00 1994-12-29 11:40:00 4.2
173 1994-12-29 11:40:00 1994-12-31 23:59:59 6.7
173 1995-01-01 00:00:00 1995-02-05 15:30:00 6.7
174 1995-02-05 15:30:00 1995-03-12 09:45:00 3.2
175 1995-03-12 09:45:00 1995-04-11 11:30:00 1.2
176 1995-04-11 11:30:00 1995-05-11 15:30:00 2.7
321 1994-09-26 14:40:00 1994-10-30 14:30:00 0.2
322 1994-10-30 14:30:00 1994-11-27 14:45:00 7.8
323 1994-11-27 14:45:00 1994-12-29 14:20:00 4.6
324 1994-12-29 14:20:00 1994-12-31 23:59:59 4.1
324 1995-01-01 00:00:00 1995-02-05 14:35:00 4.1
325 1995-02-05 14:35:00 1995-03-12 11:30:00 8.2
326 1995-03-12 11:30:00 1995-04-11 09:45:00 1.2
.....
在一些行中,start_time
和end_time
可能類似於但整個時間窗口可能不相等。例如,
id (integer) start_time end_time my_val1 (numeric)
54 1994-12-29 09:25:00 1994-12-31 23:59:59 2.9
173 1994-12-29 11:40:00 1994-12-31 23:59:59 6.7
Start_time
和end_time
是timestamp without time zone
。 start_time
和end_time
必須在一年窗口中,因此每當年份從1994
到1995
發生變化時,那麼該行被分成兩行,因此在列id
中有重複的ID。表2 tbl2
包含類似的start_time
和end_time
(timestamp without time zone
)和列my_val2
(numeric
)。對於table 1
中的每一行,我需要加入相應的行table 2
,其中start_time
和end_time
類似。
我都試過了,
Select
a.id,
a.start_time, a.end_time,
a.my_val1,
b.my_val2
from tbl1 a
left join tbl2 b on
b.start_time = a.start_time
order by a.id;
查詢返回這是不期望3,802
行。期望的結果是1274行table 1
加入my_val2
。我知道Postgres Distinct on
子句,但我需要保留所有重複ids
的tbl1
,並且只需要加入tbl2
的my_val2
。我需要在這裏使用Postgres Window功能嗎?有人可以建議如何加入這兩張表嗎?
如果開始和結束時間在tbl2的和TBL 1相似,你應加入START_TIME和END_TIME? tbl1.start和tbl2.start的時間又有多相似?是否等於給出期望的結果,還是應該對時間進行一些舍入? – WJS
我試過了:b.start_time = a.start_time AND b.end_time = a.end_time,但查詢返回了一些空行。問題是ID僅存在於table_1中。在表2中,start_time和end_time窗口可能相同,但它們與table_1的順序不同。 –
對兩個表中的start_time和end_time執行不同的結果返回1,187行。因此,開始和結束時間不像ID一樣是唯一的。我不確定四捨五入將有助於或給出預期的結果。我無法在這裏顯示所有的start和end_time行。 –