SQL查询如何获取每个条目对应的最大日期 实现条目去重展示
解决方案
基础写法(仅需产品ID+最近下单日期)
你原SQL缺少GROUP BY子句,调整后即可实现每个产品仅返回一条最近下单日期记录:
select product_id, max(date_ordered) as latest_order_date from products group by product_id
之前使用GROUP BY仍出现重复产品的常见原因:你大概率在GROUP BY后附加了其他非聚合字段,或者在SELECT列表里加了不属于GROUP BY也没有用聚合函数包裹的字段,导致分组维度变细,同一个产品ID会被拆分成多条记录。仅保留GROUP BY product_id即可解决该问题。
进阶写法(需获取最近下单日期对应的完整行数据)
如果你还需要同时获取该产品最近下单日期对应的其他字段(比如订单号、下单用户等),可以使用窗口函数实现:
with product_order_rn as ( select *, row_number() over(partition by product_id order by date_ordered desc) as rn from products ) select * from product_order_rn where rn = 1
该写法会按产品ID分组,每组内按下单日期倒序排序,取排序后的第一条记录,即为每个产品最近的下单记录。如果需要保留同一个产品同一天的多条下单记录,把row_number()替换为rank()即可。
内容的提问来源于stack exchange,提问作者FrocketGaming
相关产品推荐
相关产品推荐

