2013-05-30 97 views
1

我想每天從emp_info表中檢索最近1周的數據。使用JOIN查詢檢索記錄

所以我用:

SELECT DAYNAME(timestamp), COUNT(*) 
FROM `emp_info` 
WHERE DATE(timestamp) > DATE_SUB(CURDATE() , INTERVAL 1 WEEK) 
GROUP BY DAYNAME(timestamp); 

據我得到的結果類似查詢:

Monday 5 
Thursday 7 

但我也希望結果平日的爲上沒有記錄已輸入。

從建議我知道了關於JOIN查詢。所以我試圖解決它,但沒有得到任何解決方案。

回答

4

你得到的結果是正確的,因爲在特定的日期名稱上沒有記錄。由於您想要獲取所有日期名稱,因此需要投影一整天(,在SUBQUERY內使用UNION),並將其與現有查詢結合使用。

SELECT a.day_name, 
     COALESCE(b.totalCount, 0) totalCount 
FROM 
     (
      SELECT 'Sunday' day_name, 1 ordby UNION ALL 
      SELECT 'Monday' day_name, 2 ordby UNION ALL 
      SELECT 'Tuesday' day_name, 3 ordby UNION ALL 
      SELECT 'Wednesday' day_name, 4 ordby UNION ALL 
      SELECT 'Thursday' day_name, 5 ordby UNION ALL 
      SELECT 'Friday' day_name, 6 ordby UNION ALL 
      SELECT 'Saturday' day_name, 7 ordby 
     ) a 
     LEFT JOIN 
     (
      SELECT DAYNAME(timestamp) day_name, 
        COUNT(*) totalCount 
      FROM `emp_info` 
      WHERE DATE(timestamp) > DATE_SUB(CURDATE() , INTERVAL 1 WEEK) 
      GROUP BY DAYNAME(timestamp) 
     ) b ON a.day_name = b.day_name 
ORDER BY a.ordby 
+1

感謝,這對我的作品。但是,如果我使用以前的查詢,是否有辦法強制填寫「0」以填補缺失的日期?我問這個問題,因爲如果我要把這些數據存儲一個月,我的查詢將成爲一篇文章。 – Sam

+0

不客氣':)' –