gar*_*ley 8 mysql sql database
所以我有点难过,我有一个像这样的表设置
+-----------+------+
| Timestamp | Size |
+-----------+------+
| 1-1-13 + 10.3 +
+-----------+------+
| 1-3-13 + 6.7 +
+-----------+------+
| 1-5-13 + 3.0 +
+-----------+------+
| 1-9-13 + 11.4 +
+-----------+------+
Run Code Online (Sandbox Code Playgroud)
而且我想知道是否有任何方法可以运行这样的查询
SELECT * FROM table ORDER BY timestamp ASC LIMIT BY (SUM(size) <= 20.0);
这应该抓住前三行,因为前3行的大小总和为20.但是,它可能并不总是3行等于20.有时第一行的值可能为20,并且情况下,它应该只抓住第一个.
我已经意识到这可以在查询运行后快速计算PHP中的总和,但我只想用MySQL完成这个.
SELECT * FROM ints ORDER BY i;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+
SELECT x.* ,SUM(y.i) FROM ints x JOIN ints y ON y.i <= x.i GROUP BY x.i;
+---+----------+
| i | SUM(y.i) |
+---+----------+
| 0 | 0 |
| 1 | 1 |
| 2 | 3 |
| 3 | 6 |
| 4 | 10 |
| 5 | 15 |
| 6 | 21 |
| 7 | 28 |
| 8 | 36 |
| 9 | 45 |
+---+----------+
SELECT x.* ,SUM(y.i) FROM ints x JOIN ints y ON y.i <= x.i GROUP BY x.i HAVING SUM(y.i) <= 20;
+---+----------+
| i | SUM(y.i) |
+---+----------+
| 0 | 0 |
| 1 | 1 |
| 2 | 3 |
| 3 | 6 |
| 4 | 10 |
| 5 | 15 |
+---+----------+
Run Code Online (Sandbox Code Playgroud)
您想要添加一个运行总计,并根据该限制,以下应该工作:
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
Run Code Online (Sandbox Code Playgroud)
编辑:这里演示 - SQL小提琴
| 归档时间: |
|
| 查看次数: |
1633 次 |
| 最近记录: |