Click here to Skip to main content
15,887,405 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I have table named : PODetail
Fields are : POID, PONO, PODate, ItemCode, ItemName, Rate.

I want Last 3 PONo by Item.

for example,

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


I get OutPut Like this which I have try, but it is not giving only first 3 by Item. It show all PO. I cant solve this..please help me.

What I have tried:

SQL
Select row_number() over(PARTITION BY ItemCode order by ItemCode) srno, 
tbl_ItemMaster.ItemCode, PONO, Rate
From PODetail
Order By ItemCode, PODate DESC
Posted
Updated 4-Apr-20 5:15am
v2
Comments
[no name] 4-Apr-20 10:00am    
Have you thought about something like SELECT TOP 3....?
Member 9720862 4-Apr-20 10:52am    
No. I Want OutPut which I have written in "for Example...". I want this Output..
[no name] 4-Apr-20 10:55am    
.
Member 9720862 4-Apr-20 10:53am    
I want Item Wise Last 3 PONO...which i have wrinten in "For Example.."

If you would like to get 3 records of every item:
SQL
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)
 
Share this answer
 
v2
Comments
Member 9720862 4-Apr-20 13:24pm    
by this Query Last 3 PO which I have generate is not coming, for this in inner Query we need to put Order by PODate desc, but when i put Order by in inner Query its give error.
and without order by date desc its result will come wrong. that is my problem I am facing in this query.
Maciej Los 4-Apr-20 13:52pm    
I don't know what you're talking about, because i've tested it on temporary data. See updated answer.
Try:
SQL
SELECT TOP 3 ItemName as Item, PONO, Rate FROM MyTable ORDER BY ItemCode, PODate DESC
 
Share this answer
 
Comments
Member 9720862 4-Apr-20 10:52am    
No. I Want OutPut which I have written in "for Example...". I want this Output..
Member 9720862 4-Apr-20 10:54am    
I want Item Wise Last 3 PONO...which i have wrinten in "For Example.."

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900