Click here to Skip to main content
15,880,392 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi,

I have a table like below
ID	RefNo	Prefix	Seq
179	55	I	1
180	55	A	1
182	55	A	2
183	55	A	3
184	56	A	1
181	56	I	1
187	56	A	2
188	56	A	3
189	59	I	1
190	59	A	1

And i need outpot from this table Based on RefNo , Prefix , seq
ID	RefNo	Prefix	Seq
183	55	A	3
188	56	A	3
190	59	A	1

MAx of Seq number based on prefix in RefNo field should be as output

PLease help me to write SQL Query

Thanks
Mohan
Posted
Updated 28-Jul-14 0:08am
v2
Comments
Gihan Liyanage 28-Jul-14 5:46am    
ID RefNo Prefix Seq
183 55 A 3
188 56 A 3
190 59 A 1

Is this the real Output You want ? Or You want Each Maximum Value for each Category ? Can you please explain it bit. and write the real output
V Mohan 28-Jul-14 5:53am    
Thanks. I want Each maximum value in each category.
Flow is
1.first need to take distinct value of Refno
2.Check the Prefix for those rows and take maximum value of Prefix
3 Then in that i need to get max as seq
For above example
1.55, 56,59 is the output of first step

2 in these A is max of 55 and 56,59
3 for a 55 Seq 3 is the maximum, for 56 a 3 seq is maximum
4 for 59 a is the max value
so the output is
ID RefNo Prefix Seq
183 55 A 3
188 56 A 3
190 59 A 1


Thanks in advance


Using a combination of GROUP BY and MAX should give you the right results.
 
Share this answer
 
v2
Comments
V Mohan 28-Jul-14 6:19am    
Can you please help with this
Maciej Los 28-Jul-14 7:33am    
Good point, 5!
SQL
SELECT * FROM
(
SELECT row_number() OVER (PARTITION BY RefNo order by RefNo,Prefix ,Seq DESC) srno, ID, RefNo, Prefix, Seq
from TableName
) as temp
where srno = 1

Happy Coding!
:)
 
Share this answer
 
Comments
V Mohan 28-Jul-14 6:36am    
Thank you so much. Its working fine
Aarti Meswania 28-Jul-14 6:49am    
welcome :)
Glad to help you! :)
Maciej Los 28-Jul-14 7:34am    
Good job, Aarti!
Glad to see you again ;)
Aarti Meswania 28-Jul-14 7:44am    
thank you, Maciej Los :)
As Abhinav S. had mentioned, it's possible to use GROUP BY clause. There is only one note: ID must be omitted.
SQL
SELECT RefNo, Prefix, MAX(Seq) AS Seq
FROM TableName
GROUP BY RefNo, Prefix
 
Share this answer
 
Comments
Aarti Meswania 28-Jul-14 7:46am    
without ID it's good option
my method is resource and time taking if OP do not need ID then your query is best suited
Maciej Los 28-Jul-14 8:50am    
Thank you, Aarti ;)
Aarti Meswania 28-Jul-14 9:50am    
welcome :)
SQL
SELECT Last(Table1.ID) AS LastOfID, Table1.RefNo, Min(Table1.PreFix) AS MinOfPreFix, Max(Table1.Seq) AS MaxOfSeq
FROM Table1
GROUP BY Table1.RefNo;
 
Share this answer
 
Comments
Maciej Los 28-Jul-14 7:36am    
Does LAST is it built-in SQL function?
In MS SQL Server 2012 Express edition i got the message error: 'LAST' is not a recognized built-in function name.
Mahender Sharma 28-Jul-14 23:41pm    
This is MS ACCESS query and requiers chaneges accordingly
Maciej Los 29-Jul-14 1:53am    
Have a look at tags, they are: SQL, Server. Your answer does not corresponds to them. Please, delete this answer to avoid down-voting.

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