Mysql 创建返回具有最新日期的不同id的视图
我试图构建一个包含用户id、日期和统计值的视图,但遇到了一个问题 基本上,如果我有一个包含以下内容的表:Mysql 创建返回具有最新日期的不同id的视图,mysql,sql,view,Mysql,Sql,View,我试图构建一个包含用户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 -------------
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
问题在于,虽然第一个视图返回与子查询相同的结果,但第二个视图给出了错误的日期值。使用:
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不允许在视图中使用子查询
SELECT语句不能在FROM子句中包含子查询
此外,如果有2个以上的id值与相同的“最大日期”值相同,则可能会出现重复--如果需要,请向查询中添加DISTINCT
自联接保证为stat列返回的值-:
正确的。简单地说:获取每个id的最大日期,然后获取该id和日期的统计数据。
SELECT a.id,
a.stat,
MAX(a.date) AS date
FROM YOUR_TABLE a
GROUP BY a.id
SELECT *
FROM table
GROUP BY id, date
HAVING MAX(date)