一尘不染

通过行值的总和限制SQL

sql

所以我有点困惑,我有一个这样的表设置

+-----------+------+
| Timestamp | Size |
+-----------+------+
|   1-1-13  + 10.3 +
+-----------+------+
|   1-3-13  +  6.7 +
+-----------+------+
|   1-5-13  +  3.0 +
+-----------+------+
|   1-9-13  + 11.4 +
+-----------+------+

我想知道是否有任何方式可以运行这样的查询

SELECT * FROM table ORDER BY timestamp ASC LIMIT BY (SUM(size) <= 20.0);

这应该抓住前三行,因为前三行的in的总和为20。但是,它可能并不总是等于20的三行。有时第一行的值可能为20,在那在这种情况下,它应该只抓住第一个。

我已经知道,可以在运行查询后在PHP中快速计算总和,但是我正在尝试仅使用MySQL来实现。


阅读 116

收藏
2021-03-17

共1个答案

一尘不染

您想要添加一个运行总计,并基于此限制,以下应该起作用:

SET @runtot:=0;
 SELECT 
    q1.t,
    q1.s,
    (@runtot := @runtot + q1.s) AS rt
 FROM 
    (SELECT Date AS t,
     SIZE AS s
     FROM  Table1
     ORDER  BY Date
     ) AS q1
WHERE @runtot + q1.s <= 20

编辑:这里的演示-SQL Fiddle

2021-03-17