我正在尝试构建一个包含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
问题是,当第一个视图返回与子查询相同的结果时,第二个视图会给出错误的日期值。
答案 0 :(得分: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
。
自联接保证为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
答案 1 :(得分:0)
SELECT *
FROM table
GROUP BY id, date
HAVING MAX(date)