嗨,我试图使用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
字符串
1条答案
按热度按时间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 |
您可以尝试使用此查询:
字符串