MySQL技术问询:如何筛选最后一笔订单距今超一年的客户ID
解决方法:筛选最后一笔订单超过一年的客户
嘿,我懂你的问题所在了——你当前的SQL语句其实是先把所有订单日期早于一年前的记录筛选出来,再按客户分组。但这样会把那些有新订单但历史上存在旧订单的客户也错误地包含进来,毕竟只要他们有一笔旧订单符合条件,就会被选中,但你真正要的是那些最后一笔订单也超过一年的客户。
下面给你两种靠谱的解决方案:
方法一:使用GROUP BY + HAVING(简洁高效)
这种方法直接通过分组后取每个客户的最新订单日期,再筛选这个日期是否满足条件:
SELECT CustomerId FROM `order` GROUP BY CustomerId HAVING MAX(OrderDate) <= DATE_SUB(NOW(), INTERVAL 1 YEAR)
注意:order是MySQL的保留关键字,所以需要用反引号`把表名括起来,避免语法错误。
方法二:使用窗口函数(更灵活,适合扩展)
如果你之后需要查看这些客户最新订单的更多信息(比如订单号),用窗口函数会更直观:
WITH LatestOrders AS ( SELECT CustomerId, OrderDate, -- 给每个客户的订单按日期降序编号,最新的订单编号为1 ROW_NUMBER() OVER (PARTITION BY CustomerId ORDER BY OrderDate DESC) AS rn FROM `order` ) SELECT CustomerId FROM LatestOrders WHERE rn = 1 AND OrderDate <= DATE_SUB(NOW(), INTERVAL 1 YEAR)
两种方法都能精准筛选出最后一笔订单距今超过一年的客户,你可以根据自己的需求选择~
内容的提问来源于stack exchange,提问作者Zero-G.
相关产品推荐
相关产品推荐

