我有一个使用 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/