【问题标题】:Count different days of the same month计算同一个月的不同天数
【发布时间】:2017-08-14 10:09:10
【问题描述】:

我从 MySQL 数据库中选择特定行并获得以下列表:

2017-07-28
2017-07-28
2017-07-28
2017-07-28
2017-07-31
2017-07-31
2017-08-01
2017-08-01
2017-08-02
2017-08-02
2017-08-02
2017-08-03
2017-08-04

我想计算每个月有多少天不同,在这种情况下我想得到以下结果:

2017-07: 2 different days
2017-08: 4 different days

我尝试在数组的帮助下做到这一点,但没有成功。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    使用:

    SELECT DATE_FORMAT(date_col, '%Y-%m') AS year_month
          , COUNT(DISTINCT DAY(date_col)) AS cnt
    FROM your_table
    GROUP BY DATE_FORMAT(date_col, '%Y-%m');
    

    它是如何工作的:

    • 首先基于year-month部分创建组
    • 使用聚合函数COUNT 统计每组中的出现次数
    • DISTINCT 仅获取月份中不同的日期值

    【讨论】:

    • 我认为他是 mysql 新手,所以向他解释一下 group by mean here 以及为什么它是必需的解决方案
    • 运行此查询时我得到 NULL:$sql = "SELECT DATE_FORMAT(start_date, '%Y-%m') AS year_month, COUNT(DISTINCT DAY(start_date)) AS cnt FROM xxx GROUP BY DATE_FORMAT(start_date, '%Y-%m');"; $query = $dbh->prepare($sql); $查询->执行(); $list = $query->fetchAll(); foreach ($list as $row) {} var_dump($row);在 MySQL 中,日期存储为时间戳。
    【解决方案2】:

    例如

    DROP TABLE IF EXISTS my_table;
    
    CREATE TABLE my_table
    (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
    ,dt DATE NOT NULL
    );
    
    INSERT INTO my_table (dt) VALUES
    ('2017-07-28'),
    ('2017-07-28'),
    ('2017-07-28'),
    ('2017-07-28'),
    ('2017-07-31'),
    ('2017-07-31'),
    ('2017-08-01'),
    ('2017-08-01'),
    ('2017-08-02'),
    ('2017-08-02'),
    ('2017-08-02'),
    ('2017-08-03'),
    ('2017-08-04');
    
    SELECT DATE_FORMAT(dt,'%Y-%m') yearmonth, COUNT(DISTINCT dt) total FROM my_table GROUP BY yearmonth;
    +-----------+-------+
    | yearmonth | total |
    +-----------+-------+
    | 2017-07   |     2 |
    | 2017-08   |     4 |
    +-----------+-------+
    

    【讨论】:

    • @TimBiegeleisen(缓慢的一天 ;-))
    猜你喜欢
    • 2013-10-09
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 2012-03-12
    • 2015-12-11
    • 2013-12-24
    相关资源
    最近更新 更多