我有一張my_table類似于:
id start_date end_date
1 2019-12 2021-12
2 2017-11 2019-03
3 2016-09 2018-09
我有另一個表格date_values,例如每個日期:
date_value
2016-09
2016-10
我想獲得每個月的輸出:
month num_people
2016-09 1
2016-10 1
我該怎么做呢?
我知道我需要按月分組,然后按 COUNT(id) 聚合,但我不確定如何以我需要的格式獲取日期。非常感謝幫助,謝謝!
uj5u.com熱心網友回復:
您可以嘗試JOIN使用日期范圍,BETWEEN但您的 DateTime 不是有效格式,我們需要使用STR_TO_DATE函式將字串轉換為 DateTime 然后比較
查詢 1:
SELECT t2.date_value,COUNT(*) num_people
FROM my_table t1
INNER JOIN date_values t2
ON STR_TO_DATE(CONCAT(t2.date_value,'-01'), '%Y-%m-%d')
BETWEEN STR_TO_DATE(CONCAT(t1.start_date ,'-01'), '%Y-%m-%d')
AND STR_TO_DATE(CONCAT(t1.end_date ,'-01'), '%Y-%m-%d')
GROUP BY t2.date_value
結果:
| date_value | num_people |
|------------|------------|
| 2016-09 | 1 |
| 2016-10 | 1 |
我建議date_value, start_date,end_date可能是 DateTime 型別而不是字串型別。
如果你想以格式顯示DATE_FORMAT資料yyyy-MM,我們可以使用DATE_FORMAT函式。
SELECT DATE_FORMAT(now(),'%Y-%m')
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/431158.html
