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

MySQL 5.5中LIMIT与子查询求和失效问题求助

问题分析与解决方法

嘿,我来帮你搞定这个MySQL的问题!

为什么你的原查询没生效?

你原来写的查询里,虽然加了ORDER BY date DESC LIMIT 0,4,但这个LIMIT是在聚合函数SUM执行之后才会生效的。MySQL会先把所有满足date<@date AND id_patient=87321 AND value IS NOT NULL的行都找出来,计算它们的总和,然后再对这个单一的SUM结果应用LIMIT——但SUM本身只返回一个值,所以LIMIT等于没起作用,自然会把所有符合条件的行都加起来,而不是只取前4个。

解决方法(适配MySQL 5.5)

我们需要把逻辑调整一下:先筛选出当前行之前的最近4个非NULL值,再对这4个值求和。具体做法是把LIMIT的子查询嵌套一层,让MySQL先拿到前4个符合条件的行,再计算它们的总和。

修改后的SQL语句如下:

SELECT 
    date,
    value,
    (SELECT SUM(t.value) 
     FROM (SELECT value 
           FROM mytable 
           WHERE date < m.date 
             AND id_patient = 87321 
             AND value IS NOT NULL 
           ORDER BY date DESC 
           LIMIT 4) AS t) AS somme
FROM mytable m
WHERE m.id_patient = 87321;

验证结果

这个查询会完全符合你的预期:

  • 比如2019-11-28那一行,之前的4个非NULL值是1(2019-11-27)、6(2019-11-26)、4(2019-11-25)、3(2019-11-24),总和刚好是14,和你给出的预期结果一致。
  • 如果需要支持多个患者,只需要把子查询里的id_patient = 87321改成id_patient = m.id_patient即可。

内容的提问来源于stack exchange,提问作者Franck Barlet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:06:21