如何查询2022年11月注册后15天内下单≥3次的买家?SQL报错求助
修正后的SQL语句
原语句存在以下关键问题:
- 日期偏移语法错误:错误使用
OPTINDATE(day,15),需用数据库对应的日期函数计算注册日期后15天 - GROUP BY字段不匹配:SELECT中的非聚合字段
OPTINDATE未加入GROUP BY(符合SQL标准的数据库会报错) - 关键字未转义:
ORDER是SQL关键字,作为字段名需转义 - 条件逻辑错误:原条件写反,应该筛选注册日期后15天内的订单,即订单日期≤注册日期+15天
针对MySQL的修正版本
SELECT b.ID, b.OPTINDATE, COUNT(p.`ORDER`) AS order_count FROM BUYER b INNER JOIN PURCHASE p USING(ID) WHERE b.OPTINDATE BETWEEN '2022-11-01' AND '2022-11-30' AND p.ORDERDATE >= b.OPTINDATE AND p.ORDERDATE <= DATE_ADD(b.OPTINDATE, INTERVAL 15 DAY) GROUP BY b.ID, b.OPTINDATE HAVING order_count >= 3;
针对SQL Server的修正版本
SELECT b.ID, b.OPTINDATE, COUNT(p.[ORDER]) AS order_count FROM BUYER b INNER JOIN PURCHASE p ON b.ID = p.ID WHERE b.OPTINDATE BETWEEN '2022-11-01' AND '2022-11-30' AND p.ORDERDATE >= b.OPTINDATE AND p.ORDERDATE <= DATEADD(DAY, 15, b.OPTINDATE) GROUP BY b.ID, b.OPTINDATE HAVING order_count >= 3;
关键说明
- 移除了SELECT中的
ORDERDATE:分组后每个买家对应多个订单日期,直接展示无意义,若需查看订单日期可改用聚合函数(如MAX(ORDERDATE))或移除该字段 - 转义了关键字
ORDER:用反引号(MySQL)或方括号(SQL Server)包裹,避免语法错误 - 修正了日期条件:确保订单日期在注册日期及之后15天内,符合需求逻辑
- 补全GROUP BY字段:将
OPTINDATE加入GROUP BY,符合SQL标准的分组规则
内容的提问来源于stack exchange,提问作者Kent B
相关产品推荐
相关产品推荐

