【问题标题】:Get the Year ago data using SQL使用 SQL 获取一年前的数据
【发布时间】:2021-06-08 10:57:26
【问题描述】:

我正在尝试构建一个表格,该表格应显示当前年份和上一年的产品价格。我必须在雪花中实现这个解决方案。我有一张如下图所示的表格。

product_id product_price Fiscal_Year
x1 $100 202002
x1 $200 201902
x1 $300 201802

我有一个单独的日期维度表,其中映射了上一个财政周年度,如下所示。

Fiscal_year PREV_FISCAL_YEAR
202002 201902
201902 201802
201802 201702

现在我想以这样的方式创建一个表格,它应该显示当前财政年度的产品价格x1 和上一财政年度的产品价格。

预期的表格输出

product_id product_price Fiscal_Year prev_product_price prev_Fiscal_Year
x1 $100 202002 $200 201902
x1 $200 201902 $300 201802
x1 $300 201802 somevalue somevalue

感谢任何帮助。谢谢

【问题讨论】:

  • 使用 LAG() 函数。
  • 产品 ID 和会计年度不是唯一值。可能有重复,所以如果我使用 lag() 那么我最终可能会将相同的会计年度值用于重复记录
  • 产品 id 和会计年度不是唯一值。(product_id, Fiscal_year) 值对也不是唯一的吗?如果是这样,那么任务是无法解决的。
  • 是的,偶数对也不是唯一的
  • 您告诉201902202002 的上一财年。如果存在具有201902 和不同product_price 值的2 个不同行(例如,$100 和$110),那么对于202002,必须使用什么值作为prev_product_price

标签: sql database snowflake-cloud-data-platform


【解决方案1】:

你可以使用你的表和连接:

select tf.*, tp.*
from t tf join
     date_dimension dd
     on tf.fiscal_year = dd.fiscal_year left join
     t tp 
     on tp.fiscal_year = dd.prev_fiscal_year and
        tp.product_id = tf.product_id;

但是,如果每个会计年度和产品只有一行,则可以使用 lag()

select t.*,
       lag(price) over (partition by product_id order by fiscal_year) as prev_price
from t;

【讨论】:

  • 在这一行dd.product_id,日期维度不会有任何产品id
  • @VipendraSingh 。 . .谢谢你。那应该是tf 而不是p
猜你喜欢
  • 2010-09-07
  • 1970-01-01
  • 2011-09-15
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
相关资源
最近更新 更多