2011-03-16 56 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) 
相关问题