Group BY子句的问题

时间:2010-11-12 11:39:26

标签: sql group-by

HI Guys

我有一张像下面这样的表

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

我可以为UserID复制,Time是当我们向表中插入记录时的当前时间。

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

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

由于 图图

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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只是我有时会使用的命名约定。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

SELECT * 来自用户 在哪里时间IN     (SELECT max(时间)      来自用户      GROUP BY USERID)