Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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中对多个数据运行相同SELECT的最简单方法_Mysql_Sql_Database - Fatal编程技术网

在MySQL中对多个数据运行相同SELECT的最简单方法

在MySQL中对多个数据运行相同SELECT的最简单方法,mysql,sql,database,Mysql,Sql,Database,我有一个非常简单的选择,比方说: SELECT COUNT(added) FROM users WHERE added < "2015-07-30" 我期望这样的结果: DATE | Count | -------------------- 2015-07-30 | 12 | 2015-07-29 | 11 | 2015-07-28 | 10 | 2015-07-27 | 9 | 2015-07-26 |

我有一个非常简单的选择,比方说:

SELECT COUNT(added) FROM users WHERE added < "2015-07-30"
我期望这样的结果:

    DATE   | Count |
--------------------                   
2015-07-30 |  12   |
2015-07-29 |  11   |   
2015-07-28 |  10   |
2015-07-27 |   9   |
2015-07-26 |   9   |
2015-07-25 |   8   |
2015-07-24 |   7   |

我想你想要这样的东西:

SELECT
  SUM(added >= CURRENT_DATE() - INTERVAL 14 DAY) AS last_14_days,
  SUM(added >= CURRENT_DATE() - INTERVAL 7 DAY) AS last_7_days,
  SUM(added = CURRENT_DATE()) AS today
FROM users
WHERE
  added >= CURRENT_DATE() - INTERVAL 14 DAY
您也可以使用它计算<2015-07-30之前和过去7天内的所有记录,但它的性能会很差,我建议您改用内联查询:

SELECT
  (SELECT COUNT(added) FROM users WHERE added < "2015-07-30") AS before_30,
  (SELECT COUNT(added) FROM users WHERE added >= "2015-09-08") AS last_7
编辑

这应该是您正在寻找的:

SELECT d.added, COUNT(*)
FROM
  (SELECT DISTINCT added
   FROM users
   WHERE added BETWEEN "2015-07-30" - INTERVAL 30 DAY AND "2015-07-30") AS d
  INNER JOIN users
  ON users.added <= d.added
GROUP BY
  d.added
ORDER BY `d`.`added` DESC

您可以创建一个存储过程,并让它接受日期参数。但我不知道你们所说的最简单的方式是什么意思。谢谢你们的帮助,但我需要返回7行,每行都有值,说明到目前为止系统中添加了多少用户。我可以用7选择+联合来做,但我想稍后将其参数化。@我知道这个答案不是OP想要的,但OP不断改变要求;我没有改变需求,我只是添加了更多的数据来可视化我需要的东西。若您在编辑之前查看我的第一个描述,您将看到我显示的查询返回了从最早的条目到给定日期添加的所有条目的计数。按日期分组只提供了关于每天添加多少用户的信息。我一点也没有改变要求。另外,我上次编辑的预期结果只是一个例子,它可以有不同的形式,如果对你或任何人来说都更容易的话。@zbignewkisły现在应该没事了哇,终于行了。它显示了太多的日期,但我可以确定,谢谢。
SELECT "Before 30" as Interval, COUNT(*) AS total
FROM users WHERE added < "2015-07-30"
UNION ALL
SELECT "Last 7" as Interval, COUNT(*) AS total
FROM users WHERE added >= "2015-09-08"
SELECT added, COUNT(*)
FROM users
WHERE added >= CURRENT_DATE() - INTERVAL 7 DAY
GROUP BY added
SELECT d.added, COUNT(*)
FROM
  (SELECT DISTINCT added
   FROM users
   WHERE added BETWEEN "2015-07-30" - INTERVAL 30 DAY AND "2015-07-30") AS d
  INNER JOIN users
  ON users.added <= d.added
GROUP BY
  d.added
ORDER BY `d`.`added` DESC