我有这样的表
$this->Session->read('auth_user.User.user_name')
我需要每月持续的项目计数。
Title | start_date |end_date |
------ | ---------- |--------- |
Test_pro1 | 2017-06-06 |2017-08-06 |
Test_pro2 | 2017-07-06 |2017-11-06 |
如何在MYSQL中编写查询?
答案 0 :(得分:1)
你可以这样做:
SELECT MONTH(start_date),count(title)
from projects
group by month(start_date)
答案 1 :(得分:0)
可能你正在寻找这样的东西(用你要检查的值改变YOUR_DATE)?
SELECT COUNT(*) AS RC
FROM YOUR_TABLE
WHERE START_DATE <= YOUR_DATE AND END_DATE >= YOUR_DATE
答案 2 :(得分:0)
我认为概念上最简单的方法是使用日历表(即只包含日期的表,代表每个月),并将其加入当前表。连接条件是给定的年/月落在当前项目的范围内。然后,我们可以按年/月(即日期)对结果集进行分组,并计算每月有多少项目。
请注意,在下面的查询中,我列出了一个临时日历表,其中仅包含2017年的年份和月份。理想情况下,您的架构中会有一个真正的日历表,但是包含所有项目所需的时间范围很广。
SELECT
t1.year,
t1.month,
COUNT(t2.start_date) AS project_count
FROM
(
SELECT 2017 AS year, 1 AS month UNION ALL
SELECT 2017, 2 UNION ALL
SELECT 2017, 3 UNION ALL
SELECT 2017, 4 UNION ALL
SELECT 2017, 5 UNION ALL
SELECT 2017, 6 UNION ALL
SELECT 2017, 7 UNION ALL
SELECT 2017, 8 UNION ALL
SELECT 2017, 9 UNION ALL
SELECT 2017, 10 UNION ALL
SELECT 2017, 11 UNION ALL
SELECT 2017, 12
) t1
LEFT JOIN yourTable t2
ON (t1.year >= YEAR(t2.start_date) AND t1.month >= MONTH(t2.start_date)) AND
(t1.year <= YEAR(t2.end_date) AND t1.month <= MONTH(t2.end_date))
GROUP BY t1.year, t1.month;
在下面的输出中,我显示2017年的所有月份。如果您只想报告项目非零数的月份,您可以将联接切换为INNER JOIN
或添加HAVING
子句检查项目计数。
<强>输出:强>
在这里演示: