2016-02-19 63 views
0

所以我有两个表:选择多个开始和结束时间之间的多个时间点从另一个表

+----------------+  +----------------------+ 
|data_raw  |  |label     | 
+----------------+  +----------------------+ 
|type (char)  |  |serial (bigint)  | 
|time (timestamp)|  |start_time (timestamp)| 
|data (bigint) |  |end_time (timestamp) | 
|serial (bigint) |  |label (text)   | 
|device (text) |  +----------------------+ 
+----------------+ 

我需要得到所有行data_raw其中时间戳是在所有行的START_TIME和END_TIME之间data_label和serial是一样的。我试过,

SELECT time, data FROM data_raw WHERE time BETWEEN 
(SELECT start_time FROM label) AND 
(SELECT end_time FROM label); 

但这不适合我。

回答

0

您可以使用连接完成此操作。我postgre是粗糙的,但我认为这应该做你需要的东西:

SELECT time, data 
FROM data_raw, label 
WHERE data_raw.serial = label.serial 
AND time BETWEEN label.start_time AND label.end_time 
+0

感谢这个工作! – Ianlofs

0

我建议这样的事情。您是否正在根据特定标签查找此信息?如果是这样的话,那就是你换掉我放在哪里的地方。

WITH one_label AS (
SELECT * FROM label WHERE serial = 1) 
SELECT time, data FROM data_raw 
WHERE time BETWEEN one_label.start_time AND one_label.end_time; 
+0

“标签”只是两个时间戳和一个标签,用于描述data_label中data_lab == serial中的串行数据data_raw中的时间跨度。本质上,我试图从data_raw中获取所有“标记”数据,以用于训练分类模型。 – Ianlofs

相关问题