Hive 刷题——查看每件商品的售价涨幅情况
题目描述
从商品价格变更明细表(sku_price_modify_detail),得到最近一次价格的涨幅情况,并按照涨幅升序排序。
结果如下:
sku_id <string> (商品id) | price_change <decimal(16,2)> (涨幅) |
---|---|
8 | -200.00 |
9 | -100.00 |
2 | -70.00 |
11 | -16.00 |
12 | -15.00 |
3 | 1.00 |
5 | 10.00 |
10 | 10.00 |
7 | 12.00 |
6 | 12.00 |
1 | 100.00 |
4 | 400.00 |
需要用到的表:
商品价格变更明细表:sku_price_modify_detail
sku_id(商品id) | new_price(本次变更之后的价格) | change_date(变更日期) |
---|---|---|
1 | 1900.00 | 2021-09-25 |
1 | 2000.00 | 2021-09-26 |
2 | 80.00 | 2021-09-29 |
2 | 10.00 | 2021-09-30 |
参考实现
select sku_id, cast(new_price - last_price as decimal(16, 2)) price_change from (select * , lag(new_price, 1) over (partition by sku_id order by change_date ) last_price , row_number() over (partition by sku_id order by change_date desc ) rn from sku_price_modify_detail) t where rn = 1;
总结
本题是考察 lag 函数的一般用法,只要掌握,其用法即可。