Mysql 有总额问题
我有一个关于有总和的陈述的问题Mysql 有总额问题,mysql,sum,conditional-statements,having,Mysql,Sum,Conditional Statements,Having,我有一个关于有总和的陈述的问题 My table: id int(11) AUTO_INCREMENT date date number int(3) +----+------------+--------+ | id | date | number | +----+------------+--------+ | 1 | 2010-01-02 | 0 | | 2 | 2010-01-03 | 3 | | 3 | 2010-01-04 | 0
My table:
id int(11) AUTO_INCREMENT
date date
number int(3)
+----+------------+--------+
| id | date | number |
+----+------------+--------+
| 1 | 2010-01-02 | 0 |
| 2 | 2010-01-03 | 3 |
| 3 | 2010-01-04 | 0 |
| 4 | 2010-01-05 | 2 |
| 5 | 2010-01-06 | 1 |
| 6 | 2010-01-07 | 3 |
+----+------------+--------+
我想返回数字的总和为6和日期的日期'2010-01-04'
我希望返回字段号的加法等于6的日期(在本例中是在特定日期2010-01-04之后)。示例:我的查询应该返回2010-01-07,因为2010-01-05中的2个2010-01-06中的1个2010-01-06中的3个2010-01-07
我已测试了此查询,但未成功:
SELECT date, SUM(number) AS total FROM MyTable
GROUP BY date
HAVING SUM(number) = 6
看起来您在原始问题中的查询几乎是正确的。我添加了一个WHERE
子句,将日期限制为比2010-01-04
最近的日期:
SELECT date, SUM(number) AS total
FROM MyTable
WHERE date > '2010-01-04'
GROUP BY date
HAVING SUM(number) = 6
认为自联接可能是最简单的方法,在日期等于或大于自身的情况下,将表与自身联接
SELECT t1.date
FROM sometable t1
INNER JOIN sometable t2
ON t1.date <= t2.date
WHERE date > '2010-01-04'
GROUP BY t1.date
HAVING SUM(number) = 6
选择t1.date
从表t1
表t2的内部连接
日期为“2010-01-04”
按t1.date分组
总和(数)=6
根据您在OP中提供的样本数据,没有匹配的记录。请编辑您的问题并向我们显示MyTable
的表定义。另外,如果您向我们展示一个示例输入,它将生成一个非空的结果集,这可能会很好。您需要有一个共享特定日期的记录集合,其数字和等于6。您提供给我们的数据样本每个日期只有一条记录,并且number
值都小于6。您最初的问题当时根本不清楚。您的要求与OP所暗示的完全不同。即使在更新了您的问题之后,仍然不清楚您要从何处开始滚动求和。如果最后一行的数字是4怎么办?结果永远不会等于6。那又怎样?谢谢,我已经测试过你的答案了。这两个工程=)Splash58,我已经使用了你的代码(但我正在改变选择日期由选择最大(日期))。如果循环无法返回预期的日期(如果它不在数据库中),您知道吗?在这种情况下,我不希望返回MAX(date),也不希望返回任何结果。通过这种方式,我可以用我的PHP脚本设置错误消息。。。感谢=)当您使用组函数mysql时返回结果。我认为如果询问日期,您将不会收到任何行,但max(日期)
SELECT t1.date
FROM sometable t1
INNER JOIN sometable t2
ON t1.date <= t2.date
WHERE date > '2010-01-04'
GROUP BY t1.date
HAVING SUM(number) = 6