添加日期范围后SQL产品销量求和查询无结果,需实现指定日期统计
解决日期范围查询无结果的SQL问题
你的SQL添加日期条件后无记录,大概率是以下几个原因导致,对应解决方案如下:
1. 日期格式不兼容
多数数据库(如MySQL、PostgreSQL)默认更适配YYYY-MM-DD的日期格式,而非YYYY/MM/DD。如果数据库无法识别斜杠分隔的日期,会直接导致筛选条件失效。
2. 时间边界被截断
如果orr.Order_Date是带时分秒的datetime类型,BETWEEN '2022/12/23' AND '2022/12/24'会自动将后者解析为2022-12-24 00:00:00,当天所有非凌晨时段的订单都会被排除在外。
3. 分组字段与查询字段不一致
你SELECT的是od.Product_ID,但GROUP BY的是p.Product_ID——虽然两张表通过Product_ID关联,但保持字段一致能避免潜在的逻辑歧义。
修改后的SQL示例
针对上述问题,调整后的代码如下:
SELECT od.Product_ID, SUM(od.Quantity) AS sumqty FROM order_detail od JOIN product p ON od.Product_ID = p.Product_ID JOIN order_r orr ON orr.Order_ID = od.Order_ID WHERE DATE(orr.Order_Date) BETWEEN '2022-12-23' AND '2022-12-24' GROUP BY od.Product_ID ORDER BY sumqty DESC;
如果担心DATE()函数影响索引效率,也可以明确指定完整时间范围:
SELECT od.Product_ID, SUM(od.Quantity) AS sumqty FROM order_detail od JOIN product p ON od.Product_ID = p.Product_ID JOIN order_r orr ON orr.Order_ID = od.Order_ID WHERE orr.Order_Date >= '2022-12-23 00:00:00' AND orr.Order_Date <= '2022-12-24 23:59:59' GROUP BY od.Product_ID ORDER BY sumqty DESC;
另外,建议用显式JOIN替代隐式逗号分隔的连接方式,逻辑更清晰,也更容易排查关联问题。
内容的提问来源于stack exchange,提问作者John Moe
相关产品推荐
相关产品推荐

