我正在尝试将此查询转换为视图:
SELECT t.*
FROM user t
JOIN (SELECT t.UserId,
MAX( t.creationDate ) 'max_date'
FROM user t
GROUP BY t.UserId) x ON x.UserId = t.UserId
AND x.max_date = t.creationDate
但是视图不接受子查询。
这样做是为了寻找用户的最新,最新记录。 我从this other stackoverflow question
得到了这个想法有没有办法将此转换为带有连接的查询,也许?
答案 0 :(得分:2)
创建两个视图
Create View MaxCreationDate
As
SELECT t.userId, Max(t2.CreationDate) MaxCreated
FROM user t
Group By t.UserId
Create View UserWithMaxDate
As
Select t.*, m.MaxCreated From user t
Join MaxCreationDate m
On m.UserId= t.UserId
然后再拨打第二个......
编辑:嘿,基于Quassnoi的评论,以及你的收录 在原始SQL中where t.CreationDate = MaxDate
,我想知道您是否希望查看每个不同用户的所有行,每个行中该用户的最大创建日期,或者,您是否希望每个用户只有一行,一行这是最近创建的?
如果是后者,如@Quassnoi在评论中建议的那样,请更改第二个视图查询,如下所示
Create View UserWithMaxDate
As
Select t.*, m.MaxCreated From user t
Join MaxCreationDate m
On m.UserId= t.UserId
And m.MaxCreated = t.Creationdate
答案 1 :(得分:1)
CREATE INDEX ix_user_userid_creationdate_id ON user (userid, creationdate, id);
CREATE VIEW v_duser AS
SELECT DISTINCT userId
FROM user;
CREATE VIEW v_lastuser AS
SELECT u.*
FROM v_duser ud
JOIN user u
ON u.id =
(
SELECT ui.id
FROM user ui
WHERE ui.userid = ud.userid
ORDER BY
ui.userid DESC, ui.creationdate DESC, ui.id DESC
LIMIT 1
);
这很快,可以处理(userid, creationdate)
上的重复项。