最佳答案
请尝试一下:
SELECT
date_posts - INTERVAL WEEKDAY(date_posts) DAY AS date_start,
date_posts + INTERVAL (6 - WEEKDAY(date_posts)) DAY AS date_start,
COUNT(*) totalPosts,
COUNT(CASE WHEN Close_count = 1 THEN 1 END) closeCount,
COUNT(CASE WHEN Open_count = 1 THEN 1 END) openCount
FROM your_table
GROUP BY YEARWEEK(date_posts,1);
注意:
YEARWEEK(date)
函数假定开始日期是星期日
。
YEARWEEK(date,1)
函数假定开始日期为星期一
。
WEEKDAY(date)
函数返回相应周的日期索引,假设 Monday
作为一周的开始日。它返回0
表示星期一
,1
表示星期二
......以及6
> 周日
。
编辑:
对于日期范围搜索:
SELECT
date_posts - INTERVAL WEEKDAY(date_posts) DAY AS date_start,
date_posts + INTERVAL (6 - WEEKDAY(date_posts)) DAY AS date_start,
COUNT(*) totalPosts,
COUNT(CASE WHEN Close_count = 1 THEN 1 END) closeCount,
COUNT(CASE WHEN Open_count = 1 THEN 1 END) openCount
FROM your_table
WHERE date_posts >= YOUR_START_DATE - INTERVAL WEEKDAY(YOUR_START_DATE) DAY
AND date_posts <= YOUR_END_DATE + INTERVAL (6 - WEEKDAY(YOUR_END_DATE)) DAY
GROUP BY YEARWEEK(date_posts,1);
因此,基于此,如果您想获取过去 5 周(包括本周)的结果,您需要运行以下查询:
SELECT
date_posts - INTERVAL WEEKDAY(date_posts) DAY AS date_start,
date_posts + INTERVAL (6 - WEEKDAY(date_posts)) DAY AS date_start,
COUNT(*) totalPosts,
COUNT(CASE WHEN Close_count = 1 THEN 1 END) closeCount,
COUNT(CASE WHEN Open_count = 1 THEN 1 END) openCount
FROM your_table
WHERE date_posts >= (CURDATE() - INTERVAL 5 WEEK) - INTERVAL WEEKDAY(CURDATE() - INTERVAL 5 WEEK) DAY
AND date_posts <= CURDATE() + INTERVAL (6 - WEEKDAY(CURDATE())) DAY
GROUP BY YEARWEEK(date_posts,1);
关于php - 按日期获取打开和关闭的帖子计数(间隔 1 周)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38047234/