2013-05-17 83 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

相关问题