簡體   English   中英

按日期/月份分組

[英]GROUP BY date/month

我有一個表,其中包含許多日期格式如下的交易:

January 1, 2016
September 9, 2016
September 13, 2016
August 8, 2017
August 9, 2017

當日期在中間時,我將如何將月份和年份分組在一起-它們是Varchar

這是一個棘手的問題。 我們可以通過以下方法來解決此問題:首先使用STR_TO_DATE將日期字符串轉換為真實日期,然后使用DATE_FORMAT返回字符串以獲取用於對數據進行分組的月份和年份。

SELECT
    DATE_FORMAT(STR_TO_DATE(date_col, '%M %e, %Y'), '%Y-%m') AS ym,
    SUM(some_col) AS sum_col
FROM yourTable
GROUP BY
    DATE_FORMAT(STR_TO_DATE(date_col, '%M %e, %Y'), '%Y-%m')

為了獲得更好的長期解決方案,請考慮將文本日期存儲在某種MySQL日期列類型中。 另一種選擇是將日期存儲在數值列中,以自該紀元以來的秒數為單位。 上面的查詢雖然在邏輯上可能是正確的,但可能沒有使用任何索引的機會,因此從性能的角度來看,您應嘗試避免出現這種情況。

演示在這里:

右旋酯

GROUP BY DATE_FORMAT(record_date, '%Y%m')

參考鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM