2017-08-14 72 views
2

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

我試圖在數組的幫助下做到這一點,但沒有成功。

回答

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只得到第一個創建組月中不同的日期值
+0

我覺得他是一個新的mysql因此向他解釋的意思做組在這裏和爲什麼它需要的解決方案 – droidnation

+0

我運行此查詢時,得到NULL: $ SQL =「SELECT DATE_FORMAT(起始,「% 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); $ query-> execute(); $ list = $ query-> fetchAll(); foreach($ list as $ row){} var_dump($ row); 在MySQL日期存儲爲時間戳。 –

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

@TimBiegeleisen(緩慢的一天;-)) – Strawberry