首頁 >資料庫 >mysql教程 >即使資料遺失,如何從資料庫取得按月記錄?

即使資料遺失,如何從資料庫取得按月記錄?

Patricia Arquette
Patricia Arquette原創
2024-11-06 05:55:02823瀏覽

How to Get Month-Wise Records from a Database Even When Data is Missing?

即使資料遺失也取得資料庫中的按月記錄

在資料庫管理系統中,通常需要從表中擷取按月記錄。然而,當某些月份的數據點缺失時,就會出現挑戰。本文解決了這個問題,提出了一種解決方案來產生完整的月份列表並檢索相應的數據,即使值不存在也是如此。

您提供的原始查詢:

SELECT COUNT( `userID` ) AS total, DATE_FORMAT( `userRegistredDate` , '%b' ) AS MONTH , YEAR( `userRegistredDate` ) AS year
FROM `users`
GROUP BY DATE_FORMAT( FROM_UNIXTIME( `userRegistredDate` , '%b' ) )

提供了期望的輸出,但僅限於現有資料的幾個月。為了處理缺少的月份,我們使用一個包含完整月份列表的表,並將其與用戶表連接:

SELECT COUNT(u.userID) AS total, m.month
FROM (
    SELECT 'Jan' AS MONTH
    UNION SELECT 'Feb' AS MONTH
    UNION SELECT 'Mar' AS MONTH
    UNION SELECT 'Apr' AS MONTH
    UNION SELECT 'May' AS MONTH
    UNION SELECT 'Jun' AS MONTH
    UNION SELECT 'Jul' AS MONTH
    UNION SELECT 'Aug' AS MONTH
    UNION SELECT 'Sep' AS MONTH
    UNION SELECT 'Oct' AS MONTH
    UNION SELECT 'Nov' AS MONTH
    UNION SELECT 'Dec' AS MONTH
) AS m
LEFT JOIN users u 
ON MONTH(STR_TO_DATE(CONCAT(m.month, ' 2013'),'%M %Y')) = MONTH(u.userRegistredDate)
AND YEAR(u.userRegistredDate) = '2013'
GROUP BY m.month
ORDER BY 1+1;

此聯合表確保所有月份都得到表示,從而獲得完整的結果集。以下介紹了一種簡化查詢的替代方法:

SELECT COUNT(u.userID) AS total, DATE_FORMAT(merge_date,'%b') AS month, YEAR(m.merge_date) AS year
FROM (
    SELECT '2013-01-01' AS merge_date
    UNION SELECT '2013-02-01' AS merge_date
    UNION SELECT '2013-03-01' AS merge_date
    UNION SELECT '2013-04-01' AS merge_date
    UNION SELECT '2013-05-01' AS merge_date
    UNION SELECT '2013-06-01' AS merge_date
    UNION SELECT '2013-07-01' AS merge_date
    UNION SELECT '2013-08-01' AS merge_date
    UNION SELECT '2013-09-01' AS merge_date
    UNION SELECT '2013-10-01' AS merge_date
    UNION SELECT '2013-11-01' AS merge_date
    UNION SELECT '2013-12-01' AS merge_date
) AS m
LEFT JOIN users u 
ON MONTH(m.merge_date) = MONTH(u.userRegistredDate)
AND YEAR(m.merge_date) = YEAR(u.userRegistredDate)
GROUP BY m.merge_date
ORDER BY 1+1;

此修改後的查詢使用日期並集來表示完整的月份範圍。即使沒有所有月份的數據,這兩種方法都實現了產生按月記錄的目標。

以上是即使資料遺失,如何從資料庫取得按月記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn