固定日期范围之间的 MySQL 记录

标签 mysql codeigniter date datetime codeigniter-3

我有一个使用 CodeIgniter 3 构建的小型应用程序,需要执行一个将转换为 Chart.js 的报告。报告应以年度为基础,但在每月的特定日期进行。要求所有数据计数必须为第四个月至第三个月。像这样:

例如,一月报告为 1 月 4 日至 2 月 3 日、2 月 4 日至 3 月 3 日……等等。

我已经创建了一个 MySQL 查询,但我不知道如何获取日期。我的查询如下:

SELECT DATE_FORMAT(odd_date_created, '%Y') as 'year',
DATE_FORMAT(odd_date_created, '%m') as 'month',
COUNT(odd_id) as 'total', status
FROM odd_data 
WHERE status = $id and 
GROUP BY DATE_FORMAT(odd_date_created, '%Y%m'), status

我是 MySQl 新手。有人可以帮我解决这个问题吗?我陷入了困境,应该将日期查询放在哪里。

最佳答案

首先我想提醒您,当您加入数据时,不要在以下内容中使用“Between”,而是使用此方法 data.date >= r.period_start_dt and data.date < r.period_end_dt

其次,我假设您的数据确实有日期或时间戳,并且将落在以下计算范围内:

set @year :=2017;

select
       *
from (
        select 
               start_dt + INTERVAL m.n MONTH     period_start_dt
             , start_dt + INTERVAL m.n + 1 MONTH period_end_dt
        from (
               select str_to_date(concat(@year,'-01-04'),'%Y-%m-%d') start_dt ) seed
        cross join (select 0 n union all
                    select 1 union all
                    select 2 union all
                    select 3 union all
                    select 4 union all
                    select 5 union all
                    select 6 union all
                    select 7 union all
                    select 8 union all
                    select 9 union all
                    select 10 union all
                    select 11
                   ) m
     ) r
## LEFT JOIN YOUR DATA
## ON data.date >= r.period_start_dt and data.date < r.period_end_dt

示例范围:(在此演示中生成您自己的范围:http://rextester.com/CHTKSA95303)

nb dd.mm.yyyy (.de format)
+----+---------------------+---------------------+
|    |   period_start_dt   |    period_end_dt    |
+----+---------------------+---------------------+
|  1 | 04.01.2017 00:00:00 | 04.02.2017 00:00:00 |
|  2 | 04.02.2017 00:00:00 | 04.03.2017 00:00:00 |
|  3 | 04.03.2017 00:00:00 | 04.04.2017 00:00:00 |
|  4 | 04.04.2017 00:00:00 | 04.05.2017 00:00:00 |
|  5 | 04.05.2017 00:00:00 | 04.06.2017 00:00:00 |
|  6 | 04.06.2017 00:00:00 | 04.07.2017 00:00:00 |
|  7 | 04.07.2017 00:00:00 | 04.08.2017 00:00:00 |
|  8 | 04.08.2017 00:00:00 | 04.09.2017 00:00:00 |
|  9 | 04.09.2017 00:00:00 | 04.10.2017 00:00:00 |
| 10 | 04.10.2017 00:00:00 | 04.11.2017 00:00:00 |
| 11 | 04.11.2017 00:00:00 | 04.12.2017 00:00:00 |
| 12 | 04.12.2017 00:00:00 | 04.01.2018 00:00:00 |
+----+---------------------+---------------------+

关于固定日期范围之间的 MySQL 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47275979/

相关文章:

php - 验证用户类型并禁用 php 中的几个链接

mysql - 无法启动 mysqld

javascript - 如何在 Codeigniter 中使用 Ajax 将变量从 Controller 传递到 View ?

javascript - javascript 中 Date 构造函数中字符串 "0"到 "110"的字符串解析背后的逻辑是什么?

arrays - 用于选择数组最小值的 VBA 代码

javascript - 解析日期格式的性能 [javascript]

php - 改善脚本执行时间

php - PHP 中的单词出现次数 - 缩放和优化

php - 使用在 codeigniter 框架下构建的 oauth 2 保护我的 API

javascript - 将值从 View 传递到 Controller ,然后再次从 Controller 传递到 View ?