Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 有总额问题_Mysql_Sum_Conditional Statements_Having - Fatal编程技术网

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