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

Patricia Arquette
發布: 2024-11-06 05:55:02
原創
715 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!