0

提前致谢!这是一个有点长的问题,但希望它清晰简洁。

我有两个不同的查询带来两个数据集。

两个数据集都为相似区域带来相同粒度的数据。

第一个数据集在一个季节的每个月有多个快照,因此对于一个季节的相同谷物,每个季节它具有三个不同的指标值。

数据集 1 ( country , season , month , metric 是列名) (1. A , fall, 9/1, 1 是列的记录)

国家 季节 月度 指标

  1. A、秋季、9/1、1
  2. A、秋季、10/1、2
  3. A、秋季、11/1、3

其中,由于第二个数据集有一个季节的快照(仅淡季一个月),因此每个季节只有一个快照。

数据集 2

国家 季节 月度 指标

  1. A , 秋天 , 9/1 , 4

我目前的完全外连接方法给了我以下输出

国家 季节 月份 metric1 metric2

  1. A、秋季、9/1、1、4

  2. A、秋季、10/1、2、

  3. A、秋季、11/1、3、

**请注意,如果使用 nvl,10/1 和 11/1 的 metric2 为空白或零,但我们需要在这两个月内填充相同的值 4,以及 如何实现这一点

或最终输出应该看起来像这样

国家 季节 月份 metric1 metric2

  1. A、秋季、9/1、1、4

  2. A、秋季、10/1、2、4

  3. A、秋季、11/1、3、4

4

3 回答 3

1

我根本不熟悉 Snowflake,但假设它使用相当标准的 SQL,这应该很简单:

SELECT a.country, a.season, a.month, a.metric AS metric1, b.metric AS metric2
FROM dataset1 a
INNER JOIN dataset2 b
ON a.country = b.country AND a.season = b.season

即它不应该需要一个完整的外部连接,并且应该只需要匹配国家和季节。PS 如果您在问题中展示了您尝试过的 SQL,这将有所帮助。

于 2020-09-29T04:47:33.727 回答
0

更改连接条件。

而不是仅仅使用

Dataset1.country = Dataset2.country 
and Dataset1.month = Dataset2.month

使用 join 中的条件作为 -

Dataset1.country = Dataset2.country 
and Dataset1.month >= Dataset2.month

现在我不知道月份的数据类型。我已经提出了逻辑,但要进行实际比较,您可能需要根据需要进行类型转换,以便使用 >= 进行正确比较

于 2020-09-29T04:45:18.823 回答
0

使用一个left join和一个窗口函数。这是一种方法:

SELECT d1.country, d1.season, d1.month, d1.metric AS metric1,
       COALESCE(d2.metric,
                LAG(d2.metric IGNORE NULLS) OVER (PARTITION BY d1.country ORDER BY d1.month)
               ) AS metric2
FROM dataset1 d1 LEFT JOIN
     dataset2 d2
     ON d2.country = d1.country AND d2.season = d1.season;

您没有指定估算值的确切逻辑,因此这采用最新的非NULL值。

于 2020-09-29T12:37:39.357 回答