首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL如何在日期范围内计算列的和

MYSQL如何在日期范围内计算列的和
EN

Stack Overflow用户
提问于 2014-03-09 18:08:33
回答 2查看 2.3K关注 0票数 2

该表如下所示:

代码语言:javascript
复制
date       name    count
2013-1-1   Jack     20
2014-3-8   Jack     3
2014-3-1   Tom      1
2014-3-1   Jack     7
2014-2-28  Mary     4
2014-2-28  Tom      5

我想写一个查询,在过去的30天内输出总计数为的人

代码语言:javascript
复制
eg. 
    Jack 10
    Tom  6
    Mary 4

做这件事最简单的SQL是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-09 18:13:53

更新:查询为建议的@MatBailie

代码语言:javascript
复制
mysql> SELECT
    ->    name, 
    ->    SUM(count) as total_count
    -> FROM table_name
    -> WHERE `date` >= DATE_SUB(NOW(), INTERVAL 30 day) AND `date` <= NOW()
    -> GROUP BY name    
    -> ;
+------+-------------+
| name | total_count |
+------+-------------+
| Jack |          10 |
| Mary |           4 |
| Tom  |           6 |
+------+-------------+
3 rows in set (0.02 sec)

旧答案:

尝试:

代码语言:javascript
复制
SELECT
   name, 
   SUM(count) as total_count
FROM table_name
WHERE ABS(DATEDIFF(`date` , now())) < 30
GROUP BY name

它正在发挥作用:

代码语言:javascript
复制
mysql> create table table_name (`date` datetime, name char(20), count int);
Query OK, 0 rows affected (0.21 sec)

mysql> insert into table_name values
    -> ('2013-1-1',   'Jack',     20),
    -> ('2014-3-8',   'Jack',     3),
    -> ('2014-3-1',   'Tom',      1),
    -> ('2014-3-1',   'Jack',     7),
    -> ('2014-2-28',  'Mary',     4),
    -> ('2014-2-28',  'Tom',      5);
Query OK, 6 rows affected (0.12 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql> SELECT
    ->    name, 
    ->    SUM(count) as total_count
    -> FROM table_name
    -> WHERE ABS(DATEDIFF(`date` , now())) < 30
    -> GROUP BY name;
+------+-------------+
| name | total_count |
+------+-------------+
| Jack |          10 |
| Mary |           4 |
| Tom  |           6 |
+------+-------------+
3 rows in set (0.00 sec)

编辑:基于评论:

如果我想得到最高计数的前2名,那就是杰克和汤姆。怎么做呢?

使用DESC命令限制,用结果检查以下查询。

代码语言:javascript
复制
mysql> SELECT
    ->    name, 
    ->    SUM(count) as total_count
    -> FROM table_name
    -> WHERE `date` > DATE_SUB(NOW(), INTERVAL 30 day) and `date` < NOW()
    -> GROUP BY name
    -> ORDER BY total_count DESC
    -> LIMIT 2;
+------+-------------+
| name | total_count |
+------+-------------+
| Jack |          10 |
| Tom  |           6 |
+------+-------------+
2 rows in set (0.03 sec)
票数 0
EN

Stack Overflow用户

发布于 2014-03-09 18:20:08

你可以用:

代码语言:javascript
复制
SELECT name, SUM(count) FROM table_name WHERE date >= ( CURDATE() - INTERVAL 30 DAY ) GROUP BY name; 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22285980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档