计算同月的不同日期

时间:2017-08-14 10:09:10

标签: php mysql

我从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

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

2 个答案:

答案 0 :(得分: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部分
  • 创建群组
  • 使用aggreagate函数COUNT来计算每个组中的出现次数
  • DISTINCT只能获得不同的日期值

答案 1 :(得分:1)

E.g。

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 |
+-----------+-------+