2013-05-17 3 views
1

Я делаю запрос, который рассматривает каждую транзакцию части за определенный период времени. В зависимости от части она может иметь всего одну транзакцию или более 1000 транзакций. Мне нужно только вывести последние 5 транзакций за каждую часть. Вот мой запрос, не выбирая только последние 5 транзакций на каждую часть.Как выбрать последние 5 записей в группе

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

Я очень благодарен вам за помощь!

ответ

2

Всегда полезно в таких ситуациях: а CTE с оконной функции, как ROW_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