PostgreSQL:按日期范围加入两个不同日期的表格

时间:2015-08-07 15:55:02

标签: postgresql date join

我想在每个表中使用DATE列连接两个表。出于分析目的,我希望将右表中的许多数据连接到左表,因为这些是来自同一对象的数据,使用不同的颗粒测量但不一定在同一天。一个例子:

LEFT TABLE L               RIGHT TABLE R 
|ID|measDate  |someVal|     |ID|measDate  |someOtherVal|
|01|2015-02-14|0.123  |     |01|2015-02-21|22.5        |
|01|2015-03-02|0.332  |     |01|2015-02-22|21          |
|01|2015-03-08|0.222  |     |01|2015-02-23|22.9        |
|01|2015-03-15|0.3231 |     ...some more data
                            |01|2015-02-26|25.8        |
                            |01|2015-03-05|24.4        |
                            |01|2015-03-06|23.9        |
                            |01|2015-03-12|21.7        |
                            |01|2015-03-15|22.2        |

加入后的目标表应为:

|ID|measDate  |someVal|someOtherVal|
|01|2015-02-21|0.123  |22.5        |
|01|2015-02-22|0.123  |21          |
|01|2015-02-23|0.123  |22.9        |
...some more data
|01|2015-02-26|0.123  |25.8        |
|01|2015-03-05|0.332  |24.4        |
|01|2015-03-06|0.332  |23.9        |
|01|2015-03-12|0.222  |21.7        |
|01|2015-03-15|0.3231 |22.2        |

我对PostgreSQL很新,但已经听说过generate_series()CROSS JOIN。但也许其他一些技巧会做到这一点?将不胜感激任何提示并投票给好人:)非常感谢。

1 个答案:

答案 0 :(得分:0)

不知道您的数据更多(即,您是否可以在任何一个表中都有重复的日期?)如果没有,measDate列上的联接将起作用:

select l.ID, l.measeDate, l.somVal, r.someOtherVal
from l, r
where l.measeDate = r.measDate

如果存在重复的 ,那么您将需要指定一些有关这些的预期输出的更多信息。