You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GROUP BY中对MIN聚合的列添加过滤?(LeetCode1321)

解决LeetCode 1321. Restaurant Growth的日期过滤问题

你的现有SQL已经正确计算出每个日期对应的7天累计金额和平均金额,现在需要筛选出比所有访问日期最小值晚6天及之后的日期(对应原题要求从第7天开始输出结果)。你之前的HAVING语句失效,是因为GROUP BY B.visited_on后,MIN(visited_on)取的是每个分组内的最小值(也就是当前的B.visited_on本身),而非全局最早的访问日期。

只需在GROUP BY之后、ORDER BY之前添加以下HAVING条件即可:

HAVING B.visited_on >= (SELECT DATE_ADD(MIN(visited_on), INTERVAL 6 DAY) FROM Customer)

修改后的完整SQL如下:

SELECT B.visited_on AS visited_on , 
  SUM(A.amount) AS amount , 
  ROUND(AVG(A.amount),2) AS average_amount
FROM
(SELECT visited_on , SUM(amount) AS amount
FROM Customer
GROUP BY visited_on) A
JOIN 
(SELECT DISTINCT visited_on
FROM Customer) B
ON DATEDIFF(B.visited_on , A.visited_on) <= 6
AND B.visited_on >= A.visited_on
GROUP BY B.visited_on
HAVING B.visited_on >= (SELECT DATE_ADD(MIN(visited_on), INTERVAL 6 DAY) FROM Customer)
ORDER BY B.visited_on ASC

逻辑说明

  • 子查询(SELECT DATE_ADD(MIN(visited_on), INTERVAL 6 DAY) FROM Customer)会计算出全局最早访问日期往后推6天的日期
  • HAVING条件确保只保留这个日期及之后的记录,正好对应需要展示的7天窗口起始日期

内容的提问来源于stack exchange,提问作者Gravity Boy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:20:21