如何用Presto窗口函数统计商品价格变更次数并降序排序?
Presto统计商品价格变更次数查询方案
要统计每个商品的价格变更次数,核心是对比同一商品按时间排序后的相邻价格是否不同,这里用LAG()窗口函数来实现,具体查询语句如下:
SELECT DISTINCT Item, SUM(change_flag) OVER (PARTITION BY Item) AS price_change_count FROM ( SELECT Item, Price, Date, CASE WHEN LAG(Price) OVER (PARTITION BY Item ORDER BY Date) != Price THEN 1 ELSE 0 END AS change_flag FROM your_table_name ) t ORDER BY price_change_count DESC;
语句说明:
内层子查询:
LAG(Price) OVER (PARTITION BY Item ORDER BY Date):按Item分组,每组内按Date升序排列,获取当前记录的上一条价格- 通过
CASE语句判断当前价格与上一条价格是否不同,不同则标记为1(代表一次变更),相同则标记为0
外层查询:
SUM(change_flag) OVER (PARTITION BY Item):对每个商品的变更标记求和,得到总变更次数DISTINCT用于去重,避免同一商品的多条记录重复输出结果ORDER BY price_change_count DESC按变更次数降序排列
执行后就能得到预期结果:A→3,B→2。
内容的提问来源于stack exchange,提问作者mang4521
相关产品推荐
相关产品推荐

