2010-11-12 108 views
0

问题与GROUP BY子句

我有这样的波纹管一个

SurveyID(uniqueidentifier) PKey,UserID(uniqueidentifier),Time(DateTime) 

我可以有重复的用户名和时间的表是作为当前时间,当我们插入一条记录到桌上。

我必须为每个用户选择最后插入的记录。

我所有的查询都失败了。对此有何帮助?

感谢 楚楚

回答

1
SELECT u1.* 
FROM Users u1 
WHERE NOT EXISTS 
    (SELECT * 
    FROM Users u2 
    WHERE u1.ID = u2.ID AND u2.Date > u1.Date) 
+0

HI我可以在同一个表中的多个用户。我需要为每个用户获取最后插入的记录。以前的查询不起作用。 – Tutu 2010-11-12 11:51:08

+0

我编辑了帖子,我错过了ID部分 – 2010-11-12 11:53:30

0
WITH rows AS (
    SELECT 
     ROW_NUMBER() OVER (PARTITION BY UserID ORDER BY [Time] DESC) AS __ROW, 
     SurveyID, 
     PKey, 
     UserID 
    FROM yourTable 
) 
SELECT SurveyID, PKey, UserID 
FROM rows 
WHERE __ROW = 1; 

这将在Oracle和SQL Server的工作。不确定MySQL或Postgres。它在Access中不起作用。双下划线__ROW仅仅是我自己有时使用的命名规则。

0
select * from 
(
select *, row_number() over(partition by userid order by time desc) as sno from users 
) as t 
where sno=1 
+0

嘿,这对我有用。谢谢 – Tutu 2010-11-12 12:25:30

0

SELECT * FROM 用户 WHERE时间
(SELECT MAX(时间) 来自用户的 GROUP BY的用户ID)