2013-05-01 55 views
0

我有這樣的查詢:通過唯一的ID選擇頂層的記錄

SELECT TOP(1000) UserId, Key, Value 
FROM MyTable 
WHERE Processed = 'false' ORDER BY TimeStamp" 

我遍歷結果和數據導入到外部系統。這很慢,所以我想爲結果集中的所有1000個項目並行運行這些操作。這隻有在結果集中沒有重複的UserIds時纔有可能。

我已經嘗試過在客戶端上進行過濾,但是我最終得到的結果可能是從第一個1000開始的400個成員。這會導致大量數據在不同的迭代中通過線路多次發送。

有沒有辦法構建我的查詢,以便它將返回前1000行,每個UserId只有一行?它可能會返回稍微更新的記錄,但我希望結果集中只有1000個唯一的userIds。有沒有這樣的語法?

+1

哪個DBMS?例如sql-server,oracle,mysql,postgresql,sqlite? – RichardTheKiwi 2013-05-01 20:35:08

+0

SQL Server 2008 – captncraig 2013-05-01 20:37:22

回答

3
SELECT TOP(1000) UserId, [Key], Value 
FROM 
(SELECT *, RN = ROW_NUMBER() OVER (PARTITION BY UserId order by TimeStamp) 
    FROM MyTable 
    WHERE Processed = 'false') X 
WHERE RN=1 
ORDER BY TimeStamp;