我有两个包含日期范围的表,我希望以一种方式交叉乘以获得所有不同的范围。也就是说,在其中一个表中具有边界的所有范围。
具体来说,我有一张表格,其中包含产品价格及其有效日期以及具有有效日期的转换因子。因此,我希望特定价格/ conversion_factor组合的每个实例以及何时有效:
network.host: a.b.c.d
因此,每当其中一个表遇到新日期时,都应返回一个新行。在结果中,前两行引用第一个产品行的有效性,但在conversion_factos表中分成两个间隔。类似地,结果的第二行和第三行来自第二个转换因子行,但具有不同的产品行。
有没有办法用聪明的连接(在PostgreSQL中)或者我需要使用PL / pgSQL函数吗?
答案 0 :(得分:1)
此处有部分内容,您要求智能联接并要求显示正确的结果。这应该回答你的问题:
SELECT Greatest(p.start_date, cf.start_date) AS start_date
,Least(p.end_date, cf.end_date) AS end_date
,p.price_eur
,cf.dollar_to_eur
FROM products AS p
JOIN conversion_factors AS cf
ON p.start_date <= cf.end_date AND p.end_date >= cf.start_date