【问题标题】:SQL/HQL - Partition BySQL/HQL - 分区依据
【发布时间】:2018-05-21 21:12:05
【问题描述】:

试图理解 Partition By 并变得超级困惑,我有以下数据:

Name ID Product Date Amount
Jason 1  Car    Jan 2017   $10
Jason 1  Car    Feb 2017   $5
Jason 2  Car    Jan 2017   $50
Jason 2  Car    Feb 2017   $60
Jason 3  House  Jan 2017   $20
Jason 3  House  Feb 2017   $30

想做什么:

Select Name, ID, Product, Date, Amount,
       **LAG(Amount,1) Over Partition By Name Order by Date**
FROM table 

给我 Jason 上个月的正确金额相应的产品和 ID 号?因此,例如在 2017 年 2 月:Jason,ID 1 和 Product Car's 应该给我 5 美元。

我是否需要修改分区以包含产品和 ID,例如:

Select Name, ID, Product, Date, Amount,
       **LAG(Amount,1) Over Partition By *Name, ID, Product* Order by Date** FROM table' 

谢谢!

【问题讨论】:

  • 在您的示例中,您的意思是 $10 而不是 $5 吗?
  • 您的语法不正确。你的例子没有意义。只需在数据中添加另一列来指定您想要实现的目标怎么样?

标签: sql hql


【解决方案1】:

我自己也来到这里寻找对“partition by”子句的一些理解。但要回答您的问题,创建的新列将为您提供前一行的值。因此,您不必将其他列(即产品和 ID)添加到您的 Partition by 子句中。 本质上,您将拥有现有的 5 列,再加上 1 列(其中包含的行包含“金额”中前一行的值)。

【讨论】:

    猜你喜欢
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2021-10-23
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多