2010-11-12 133 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)