查询从mysql表中计算过去和未来行

时间:2017-01-30 16:20:43

标签: mysql

CREATE TABLE reminders` ( 
    id int(11) NOT NULL AUTO_INCREMENT, 
    url varchar(250) DEFAULT NULL, 
    type int(11) DEFAULT NULL, 
    actiondate datetime DEFAULT NULL, 
    PRIMARY KEY (id), UNIQUE KEY id_UNIQUE (id) ) ENGINE=InnoDB AUTO_INCREMENT=186 DEFAULT CHARSET=latin1;

我有一个mysql表,列出了我团队的所有任务。每行都有一个时间戳列。我想计算过去日期的任务数量

actiondate包含以下格式的值:

2017-12-06 00:00:00 
2017-12-06 00:00:00 
2017-03-06 00:00:00 
2017-12-06 00:00:00
2017-06-04 00:00:00 

这是包含我想要检查今天日期的数据的列

use =< CURDATE()

以及在一个查询中具有未来日期的任务数。

use > CURDATE()

做一些研究似乎mysql的CASE函数可能能够帮助我,但到目前为止还没有设法使它与预期的结果一起工作。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

立即尝试:

select
    curdate() as 'Current date',
    sum(if(actiondate <= curdate(), 1, 0)) as tasks_before,
    sum(if(actiondate > curdate(), 1, 0)) as tasks_after
from
    reminders;

结果是:

Current date         tasks_before  tasks_after
-------------------  ------------  ----------- 
31.01.2017 00:00:00      6              4

我在这里设置了一个rextester示例:http://rextester.com/WXNU86748

答案 1 :(得分:0)

您可以使用大小写,但是对于更简单的查询,您可以使用布尔表达式为过去的行生成1 / true,并为将来的行生成0 / false,然后按该值进行分组:< / p>

select (`use` =< current_date()) as in_future, 
  count(*)
from your_table 
group by in_future