【问题标题】:Stop query when SUM is reached (mysql)达到 SUM 时停止查询(mysql)
【发布时间】:2016-05-06 17:46:01
【问题描述】:

我有一个数据库,其中包含我正在处理的列。我正在寻找的是与查询中 SUM(#) 达到 6 的行关联的日期。我现在的查询将给出列中数字为六但不是前几行总和的日期。下面的例子

Date     number
----     ------
6mar16    1
8mar16    4
10mar16   6
12mar16   2

我想查询 10mar16 日期,因为在那个日期,这个数字现在大于 6。较早的日期总计不会超过 6 个。

这是我一直在处理的查询示例:

SELECT max(date) FROM `numbers` WHERE `number` > 60 

【问题讨论】:

  • 不太清楚你要求什么。你的问题能更全面一点吗?示例输入、示例输出以及到目前为止您尝试过的内容。

标签: mysql sql sum


【解决方案1】:

您可以使用此查询,它跟踪累计和然后返回满足条件的第一个:

select   date
from     (select * from mytable order by date) as base,
         (select @sum := 0) init
where    (@sum := @sum + number) >= 6
limit 1

SQL Fiddle

【讨论】:

  • 我使用了你的代码。效果很好。谢谢您的帮助。我永远不会想到这一点。
【解决方案2】:

大多数数据库都支持 ANSI 标准窗口函数。在这种情况下,累积和是你的朋友:

select t.*
from (select t.*, sum(number) over (order by date) as sumnumber
      from t
     ) t
where sumnumber >= 10
order by sumnumber
fetch first 1 row only;

在 MySQL 中,您需要变量:

select t.*
from (select t.*, (@sumn := @sumn + number) as sumnumber
      from t cross join (select @sumn) params
      order by date
     ) t
where sumnumber >= 10
order by sumnumber
fetch first 1 row only;

【讨论】:

  • 我使用了给出的第一个答案,效果很好。谢谢你的帮助。我一直在向你们学习。
  • 答案很有效。但是,如果第一个答案有效,那么您没有使用 MySQL。
【解决方案3】:

太棒了!!!!它似乎工作得很好。这是我使用的代码。

SELECT  date, id, crewname
FROM     (select * FROM flightrecord WHERE `crewname` = 'brayn' 
ORDER BY dutyTimeArrive DESC) as base,
         (select @sum := 0) init
WHERE    (@sum := @sum + tankDropCount) >= 6
limit 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-11
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多