2013-05-17 101 views
1

我正在做一個查詢,查看某個時間段內的每個部分事務。根據不同的部分,它可能只有1筆交易或1000筆以上的交易。我只需要拉取每個部分的最後5個交易。這裏是我的查詢權限,沒有選擇每個部分只有最後5個事務。如何選擇每個組的最後5條記錄

SELECT  partnum, trandate, extcost 
FROM  parttran 
WHERE  trandate between '2012-05-15' and '2013-05-14' 

我非常感謝您的幫助!

回答

2
在這些情況下

總是有用的:一個窗口功能的CTEROW_NUMBER

WITH CTE AS 
(
    SELECT partnum, trandate, extcost, 
      rn = ROW_NUMBER() OVER (PARTITION BY partnum ORDER BY trandate DESC) 
    FROM parttran 
    WHERE trandate between '2012-05-15' and '2013-05-14' 
) 
SELECT partnum, trandate, extcost FROM CTE WHERE rn <= 5 
+0

我非常感謝您的幫助!我很抱歉很痛苦,但是當我嘗試運行它時,它告訴我:Msg 102,Level 15,State 1,Line 4 '='附近的語法不正確。我認爲它是在討論= by = rn = row_number()。你能幫我解決這個問題嗎?再一次,謝謝你的一切! – jenhil34

+1

如果您至少使用SQL-Server 2005,它應該可以工作。然而,既然我現在在路上,我不能給你一個例子。 –

+0

在我的最後一個簡單的錯誤,我添加了一個領域,並沒有把一個額外的逗號!再次感謝你!!! – jenhil34

相關問題