【发布时间】:2016-08-04 03:23:37
【问题描述】:
我有两个包含日期范围的表,我想以某种方式交叉相乘以获得所有不同的范围。也就是说,在其中一个表中具有边界的所有范围。
具体来说,我有一张表格,其中包含产品价格及其有效期以及带有有效期的转换因子。因此,我想要特定 price/conversion_factor 组合的每个实例以及它从何时到何时有效:
products:
product_id start_date end_date price_eur
1 2000-01-01 2000-12-31 100
1 2001-01-01 2002-12-31 150
conversion_factors:
start_date end_date dollar_to_eur
1970-01-01 2000-03-31 1.50
2000-04-01 2000-06-30 1.60
2000-07-01 2001-06-30 1.70
2001-07-01 2003-06-30 2.00
result:
product_id start_date end_date price_eur dollar_to_eur
1 2000-01-01 2000-03-31 100 1.50
1 2000-04-01 2000-06-30 100 1.60
1 2000-07-01 2000-12-31 100 1.70
1 2001-01-01 2001-06-30 150 1.70
1 2001-07-01 2002-12-31 150 2.00
因此,每次其中一个表到达新日期时,都应返回一个新行。在结果中,前两行引用了第一个产品行的有效性,但在 conversion_factos 表中分为两个区间。同样,结果的第二行和第三行来自第二个转换因子行,但产品行不同。
有没有办法通过巧妙的连接(在 PostgreSQL 中)来做到这一点,还是我需要使用 PL/pgSQL 函数?
【问题讨论】:
标签: sql postgresql date join