2011-03-16 53 views
0

我想構建一個包含user_id,日期和統計值的視圖,但我遇到了問題。創建一個視圖,返回不同的id與最新日期

從本質上講,如果我有一個包含一個表:

ID Stat Date   
-------------------- 
01 AAA 01/01/2010 
02 BBB 02/02/2010 
03 CCC 05/01/2010 
03 DDD 06/01/2010 
01 EEE 07/01/2010 

我的看法應該有:

ID Stat Date   
-------------------- 
02 BBB 02/02/2010 
03 DDD 06/01/2010 
01 EEE 07/01/2010 

我環顧四周,我發現,這條查詢工作:

SELECT * 
    FROM (SELECT * 
      FROM TABLE 
     ORDER BY DATE DESC) tmp 
GROUP BY ID 

現在的問題是,它似乎並不像我可以在MYSQL的視圖中進行子查詢。

我試圖分裂成兩種觀點,第一個是這樣的:

CREATE OR REPLACE VIEW VIEW_TEMP AS 
    SELECT * 
    FROM TABLE 
ORDER BY DATE DESC 

與第二:

CREATE OR REPLACE VIEW NEW_VIEW AS 
    SELECT * 
    FROM VIEW_TEMP 
GROUP BY ID 

的問題是,雖然第一視圖返回相同的結果作爲子查詢,第二個視圖給了我錯誤的日期值。

回答

0

用途:

SELECT a.id, 
     a.stat, 
     a.date 
    FROM YOUR_TABLE a 
    JOIN (SELECT t.id, 
       MAX(t.date) AS max_date 
      FROM YOUR_TABLE t 
     GROUP BY t.id) b ON b.id = a.id 
         AND b.max_date = a.date 

我還沒有創建視圖測試這一點,但我記得,MySQL並沒有讓在視圖中的子查詢。 According to the documentation, about view restrictions

SELECT語句不能在FROM子句中包含子查詢。

此外,如果存在具有相同最大日期值的2+ id值,則存在重複的機會 - 如有必要,將DISTINCT添加到查詢中。

自加入保證了值的統計列返回 - that can't be said if relying on MySQL's hidden column in the GROUP BY functionality

SELECT a.id, 
     a.stat, 
     MAX(a.date) AS date 
    FROM YOUR_TABLE a 
GROUP BY a.id 
+0

權。用純英文:獲取每個ID的最大日期,然後獲取該ID和日期的統計。 – 2011-03-16 05:08:07

0
SELECT * 
FROM table 
GROUP BY id, date 
HAVING MAX(date) 
相關問題