MySQL如何查询指定日期总金额最高的单条完整账单行数据
解决方案
你只需要在原有查询语句末尾加上LIMIT 1即可实现仅返回一条符合条件的记录,修改后的语句如下:
SELECT * FROM biling WHERE total=(SELECT MAX(total) FROM biling WHERE date='2021-10-26') LIMIT 1;
可选优化
如果你对返回的记录有明确偏好(比如取同金额下订单号最小/最大的、最早生成的),可以搭配ORDER BY子句指定排序规则,避免返回结果随机:
-- 示例:取同最高金额下订单号最小的记录 SELECT * FROM biling WHERE total=(SELECT MAX(total) FROM biling WHERE date='2021-10-26') ORDER BY 订单号 ASC LIMIT 1;
如果你使用的是MySQL 8.0及以上版本,也可以用窗口函数实现,逻辑更清晰,后续如果需要调整规则也更灵活:
WITH daily_bill_rank AS ( SELECT *, RANK() OVER(ORDER BY total DESC) AS total_rank FROM biling WHERE date = '2021-10-26' ) SELECT * FROM daily_bill_rank WHERE total_rank = 1 LIMIT 1;
注意事项
- 未加
ORDER BY直接使用LIMIT 1时,MySQL会返回匹配条件中最先扫描到的记录,返回结果不固定,有明确取数规则建议指定排序条件。 - 注意校验表名拼写:你原有语句中的表名是
biling,如果实际表名是billings请自行修正。
内容的提问来源于stack exchange,提问作者Hazem El-behairy
相关产品推荐
相关产品推荐

