mysql - 如何计算过去同一时间间隔的记录数?

标签 mysql sql date

我们有两个输入DATE_FROMDATE_TO,格式为'YYYY-mm-dd',问题是统计数字[DATE_FROM, DATE_TO)[DATE_FROM -INTERVAL(DATE_TO,DATE_FROM), DATE_FROM) 期间的记录数。

为了计算第一个区间内的记录数,我们执行以下查询

SELECT 
    count(*) as num_records
FROM mytable
WHERE 
    mytable.date_doc >= 'DATE_FROM 00:00:00'
AND mytable.date_doc <= 'DATE_TO 23:59:59'

这里在日期后面加上午夜的时:分:秒,把所有天数的记录堆在边界上。

如何构造在第二个时间间隔执行相同计数的查询?

是否可以在对数据库的一次查询中完成或提出任何最佳方式来完成?

编辑

间隔 1(10 天):DATE_FROM = '2012-11-03 00:00:00',DATE_TO = '2012-11-12 23:59:59'

间隔 2(10 天):DATE_FROM = '2012-10-24 00:00:00',DATE_TO = '2012-11-02 23:59:59'

SELECT 
   SUM(IF(DATE(mytable.date_doc) BETWEEN '2012-11-03 00:00:00' AND '2012-11-12 23:59:59', 1, 0)) AS count_interval1,
   SUM(IF(DATE(mytable.date_doc) BETWEEN '2012-10-24 00:00:00' AND '2012-11-03 00:00:00', 1, 0)) AS count_interval2
FROM mytable

感谢您的专业知识!

最佳答案

试试这个:

SELECT 
   SUM(IF(DATE(mytable.date_doc) BETWEEN '2012-11-03' AND '2012-11-12', 1, 0)) AS count_interval1,
   SUM(IF(DATE(mytable.date_doc) BETWEEN SUBDATE('2012-11-03', DATEDIFF('2012-11-12', '2012-11-03') + 1) AND SUBDATE('2012-11-03', 1), 1, 0)) AS count_interval2
FROM mytable

无需指定时间。

关于mysql - 如何计算过去同一时间间隔的记录数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13563899/

相关文章:

mysql - 如何将mysql中的静态数据透视表转换为动态数据透视表?

mysql - SQL查询帮助: Getting counts based on combination of columns efficently

sql - TSQL : How do I search for a grade within a list of grades?

用于查找没有特定值的所有记录的 SQL 查询

java - 将字符串转换为日期类型

javascript - `new Date("2013-08-08T09 :40 ")` not working in jweek calendar plugin

mysql - 如何在 MySql 中使用 Lift Mapper 存储 Json 文件

php - mysql中多个表的完全外连接

mysql - SQL 中 SELECT 查询的优先级

Java 时间转换为 GMT/格式