首页 > 解决方案 > MySQL查询以计算按日期范围分组的行

问题描述

全部。我有一个表,其中的日期列要么为空,要么包含事件的日期。我试图计算这些日期中有多少落在给定范围内(例如,每月的第一天到每月的最后一天),然后按该范围分组(即按月分组)

如果我只做一个月,它会是这样的:

SELECT count(*)
FROM my_table
WHERE my_table.event_date > 1530403200 and my_table.event_date < 1530403200
/* 7/1/2018 to 7/31/2018 */

所以我真正想要的是一个查询,给我按月分组的结果,每个月的总行数,比如:

:
6/1/2018 - 6/30/2018, 8650
7/1/2018 - 7/31/2018, 9180
:
etc.

谢谢你的任何建议。

标签: mysql

解决方案


您可以使用以下内容:

SELECT
    MONTH(FROM_UNIXTIME(event_date)) AS month,
    MIN(FROM_UNIXTIME(event_date)) AS first_date,
    MAX(FROM_UNIXTIME(event_date)) AS last_date, 
    COUNT(*) AS cnt_dates
FROM my_table
WHERE FROM_UNIXTIME(my_table.event_date) > '2018-08-01' 
    AND FROM_UNIXTIME(my_table.event_date) < '2018-08-15' 
    AND NOT my_table.event_date IS NULL
GROUP BY MONTH(FROM_UNIXTIME(event_date))

演示: https ://www.db-fiddle.com/f/nNVBtJgpKkiCcf7B9GPCEN/0


推荐阅读