HIVE SQL - row_number()OVER(partition BY

oalqel3c  于 2023-08-04  发布在  Hive
关注(0)|答案(1)|浏览(262)

嗨,我试图使用row_number()在(partition)上填充row_number,但是结果没有给我第一个记录是cumulative_cost >= threshold的行号1,并且后续的行都有相同的行号。
这就是结果
| 成本金额|累计成本|threshold_reached_order| 产品ID| product_id |
| --|--|--|--| ------------ |
| 十四点零九分|十四点零九分|0个|一二三四五| 12345 |
| 10.2|二十四点二十九|0个|一二三四五| 12345 |
| 二十五点零三分|四十九点三二|三个人|一二三四五| 12345 |
| 二十八零九|七十七点四一|四个人|一二三四五| 12345 |
我在期待这个结果
| 成本金额|累计成本|threshold_reached_order| 产品ID| product_id |
| --|--|--|--| ------------ |
| 十四点零九分|十四点零九分|0个|一二三四五| 12345 |
| 10.2|二十四点二十九|0个|一二三四五| 12345 |
| 二十五点零三分|四十九点三二|一人| 一二三四五| 12345 |
| 二十八零九|七十七点四一|| 一二三四五| 12345 |

select date, cost_amt, cumulative_cost,
case when cumulative_cost >= threshold then
row_number() OVER (partition BY product_name, userid ORDER BY date, order_id) 
else 0 
end AS threshold_reached_order,
product_id
from table1
where userid = 'ABCDEFG'
order by userid , product_id

字符串

xqk2d5yq

xqk2d5yq1#

row_number()OVER(partition BY product_name,userid ORDER BY date,order_id)是一个窗口函数,它为分区内的每一行分配一个唯一的编号,该编号由product_name和userid列确定。行按日期和order_id排序。
行已经给定了编号,然后您正在输入条件。

cumulative_cost >=阈值条件前:

| 成本金额|累计成本|阈达阶|产品ID| product_id |
| --|--|--|--| ------------ |
| 十四点零九分|十四点零九分|一个|一二三四五| 12345 |
| 10.2|二十四点二十九|二个|一二三四五| 12345 |
| 二十五点零三分|四十九点三二|三个|一二三四五| 12345 |
| 二十八零九|七十七点四一|四个|一二三四五| 12345 |

cumulative_cost >=阈值条件后:

| 成本金额|累计成本|阈达阶|产品ID| product_id |
| --|--|--|--| ------------ |
| 十四点零九分|十四点零九分|0个|一二三四五| 12345 |
| 10.2|二十四点二十九|0个|一二三四五| 12345 |
| 二十五点零三分|四十九点三二|三个|一二三四五| 12345 |
| 二十八零九|七十七点四一|四个|一二三四五| 12345 |
您可以尝试使用此查询:

SELECT
  date,
  cost_amt,
  cumulative_cost,
  CASE
    WHEN cumulative_cost >= threshold THEN
      SUM(CASE WHEN cumulative_cost >= threshold THEN 1 ELSE 0 END)
      OVER (PARTITION BY product_id ORDER BY date, order_id)
    ELSE 0
  END AS threshold_reached_order,
  product_id
FROM table1
WHERE userid = 'ABCDEFG'
ORDER BY userid, product_id, date, order_id;

字符串

相关问题