日期范围的交叉产品

时间:2016-04-13 07:30:39

标签: sql postgresql date join

我有两个包含日期范围的表,我希望以一种方式交叉乘以获得所有不同的范围。也就是说,在其中一个表中具有边界的所有范围。

具体来说,我有一张表格,其中包含产品价格及其有效日期以及具有有效日期的转换因子。因此,我希望特定价格/ conversion_factor组合的每个实例以及何时有效:

network.host: a.b.c.d

因此,每当其中一个表遇到新日期时,都应返回一个新行。在结果中,前两行引用第一个产品行的有效性,但在conversion_factos表中分成两个间​​隔。类似地,结果的第二行和第三行来自第二个转换因子行,但具有不同的产品行。

有没有办法用聪明的连接(在PostgreSQL中)或者我需要使用PL / pgSQL函数吗?

1 个答案:

答案 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