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

标签 mysql sql database

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

SELECT COUNT(added) FROM users WHERE added < "2015-07-30"

我能否以某种简单的方式运行此选择,不仅针对给定日期,而且针对比方说 7 天,每行显示截至该特定日期的计数?

编辑: 这是我的 SQL 构建表:

CREATE TABLE users (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
 added DATE
);

INSERT INTO users (added) VALUES ("2015-07-30");
INSERT INTO users (added) VALUES ("2015-07-29");
INSERT INTO users (added) VALUES ("2015-07-28");
INSERT INTO users (added) VALUES ("2015-07-21");
INSERT INTO users (added) VALUES ("2015-07-26");
INSERT INTO users (added) VALUES ("2015-07-25");
INSERT INTO users (added) VALUES ("2015-07-24");
INSERT INTO users (added) VALUES ("2015-07-23");
INSERT INTO users (added) VALUES ("2015-07-29");
INSERT INTO users (added) VALUES ("2015-07-22");
INSERT INTO users (added) VALUES ("2015-07-20");
INSERT INTO users (added) VALUES ("2014-02-10");

我期待这样的结果:

    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

或 UNION 查询:

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"

编辑

根据您的评论,您需要使用 GROUP BY 查询。如果添加的是日期字段(没有时间信息),您可以使用此查询:

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

SQLFiddle here

关于mysql - 在 MySQL 中对多个数据运行相同 SELECT 的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32589420/

相关文章:

mysql - SQL Group By 对每个日期求和并使用最大日期

java - future 的sql时间戳?

mysql - 我怎样才能重写我的 MySQL 密码,以便我可以 rake db : create on rails?

php - 注册页面: Storing password using PHPASS

mysql - 重新格式化大型 XML 文件的简单方法?

php - 在 Laravel 5 和 MySQL 中,double 值中的点后仅保存两位数

php - 我怎样才能用更短的方式写出很多类似的 if 语句?

php - Mysql 触发器 IF 目标字段已更改

mysql - SQL-按特定字段分组并连接另一个字段

sql - 重复使用相同的查询,但只更新嵌套变量的值