Member 9720862 Ответов: 2

Проблема запроса в SQL server


У меня есть таблица с именем : PODetail
Поля есть : POID, PONO, PODate, ItemCode, ItemName, Rate.

Я хочу последний 3 PONo около Item.

например,

Item  | PONO | Rate
------------------
Item1 | PO50 | 1000
Item1 | PO49 | 1001
Item1 | PO48 | 1002
Item2 | PO25 | 2001
Item2 | PO24 | 2002
Item3 | PO23 | 2003


Я получаю такой вывод, который я попробовал, но он не дает только первые 3 по пункту. Это показывает все по. Я не могу решить эту проблему ... пожалуйста, помогите мне.

Что я уже пробовал:

Select row_number() over(PARTITION BY ItemCode order by ItemCode) srno, 
tbl_ItemMaster.ItemCode, PONO, Rate
From PODetail
Order By ItemCode, PODate DESC

0x01AA

Вы думали о чем-то вроде SELECT TOP 3....?

Member 9720862

Нет. Мне нужен вывод, который я написал в "Например...". я хочу этот вывод..

0x01AA

.

Member 9720862

Я хочу, чтобы пункт мудрый последний 3 поно...который у меня есть wrinten в "Например.."

2 Ответов

Рейтинг:
2

Maciej Los

Если вы хотите получить 3 записи каждого элемента:

DECLARE @PODetail TABLE(ItemCode VARCHAR(30), PONO VARCHAR(30), Rate INT, PODate Date)

INSERT INTO @PODetail(ItemCode, PONO, PODate, Rate)
VALUES('Item1', 'PO50', '2019-12-27', 1000),
('Item1', 'PO49', '2019-12-28', 1001),
('Item1', 'PO48', '2019-12-29', 1002),
('Item2', 'PO25', '2019-12-27', 2001),
('Item2', 'PO24', '2019-12-28', 2002),
('Item2', 'PO23', '2019-12-29', 2003),
('Item1', 'PO39', '2019-12-30', 1000),
('Item1', 'PO38', '2019-12-31', 1001),
('Item1', 'PO37', '2020-01-02', 1002),
('Item2', 'PO36', '2019-12-30', 2001),
('Item2', 'PO35', '2020-01-02', 2002),
('Item3', 'PO34', '2020-01-02', 2003)

SELECT *
FROM
(
    SELECT ROW_NUMBER() OVER(PARTITION BY ItemCode ORDER BY PODate DESC) srno, ItemCode, PONO, Rate, PODate
    FROM @PODetail
) T
WHERE srno IN (1, 2, 3)


Member 9720862

по этому запросу последние 3 PO, которые я сгенерировал, не приходят, для этого во внутреннем запросе нам нужно поставить порядок по PODate desc, но когда я ставлю порядок по во внутреннем запросе, он дает ошибку.
и без порядка по дате desc его результат будет неверным. это моя проблема, с которой я сталкиваюсь в этом запросе.

Maciej Los

Я не знаю, о чем вы говорите, потому что я проверил его на временных данных. См. обновленный ответ.

Рейтинг:
2

OriginalGriff

Попробуй:

SELECT TOP 3 ItemName as Item, PONO, Rate FROM MyTable ORDER BY ItemCode, PODate DESC


Member 9720862

Нет. Мне нужен вывод, который я написал в "Например...". я хочу этот вывод..

Member 9720862

Я хочу, чтобы пункт мудрый последний 3 поно...который у меня есть wrinten в "Например.."