我试图构建一个包含user_id、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问题是,虽然第一个视图返回的结果与子查询相同,但第二个视图给出了错误的日期值。
发布于 2011-03-16 11:38:45
使用:
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添加到查询中。
自连接保证了stat列的返回值- 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发布于 2011-03-16 13:20:42
SELECT *
FROM table
GROUP BY id, date
HAVING MAX(date)https://stackoverflow.com/questions/5320741
复制相似问题