Answered by:
Return Top 3 Values Within Each Group

Question
-
I'm looking to create a query that returns the top 3 sizes for each location / type group in MS Access.
RecordID, Location, Type, and Size
1,1,1,20
2,1,2,30
3,1,2,43
4,1,2,23
5,1,2,38
6,1,2,3
7,2,1,12
8,2,1,22
9,2,1,25
10,2,1,43Result:
1,1,1,20
2,1,2,30
3,1,2,43
5,1,2,38
8,2,1,22
9,2,1,25
10,2,1,43Is this even possible in MS Access? Can anyone help?
Wednesday, January 4, 2017 1:29 PM
Answers
-
Try this:
SELECT T1.RecordID, T1.Location, T1.Type, T1.Size
FROM YourTable AS T1 INNER JOIN YourTable AS T2
ON T1.Location = T2.Location
AND T1.Type = T2.Type
AND T2.Size >= T1.Size
GROUP BY T1.RecordID, T1.Location, T1.Type, T1.Size
HAVING COUNT(*) <=3
ORDER BY T1.Location, T1.Type, T1.Size DESC;
Ken Sheridan, Stafford, England
- Edited by Ken Sheridan Wednesday, January 4, 2017 5:47 PM
- Marked as answer by GMcElroy20 Wednesday, January 4, 2017 6:21 PM
Wednesday, January 4, 2017 5:43 PM
All replies
-
Hi,
It should be possible. You could try something like:
SELECT SQ.RecordID, SQ.Location, SQ.[Type], SQ.Size FROM TableName AS T1 INNER JOIN (SELECT TOP 3 T2.RecordID, T2.Location, T2.[Type], T2.Size FROM TableName AS T2 WHERE T2.Location=T1.Location AND T2.[Type]=T1.[Type] ORDER BY T2.Location, T2.[Type], T2.Size DESC) AS SQ ON T1.Location=SQ.Location AND T1.[Type]=SQ.[Type]
AND T1.Size=SQ.Size GROUP BY T1.Location, T1.[Type](untested)
Hope it helps...
- Edited by .theDBguy Wednesday, January 4, 2017 6:10 PM
Wednesday, January 4, 2017 2:22 PM -
Try this:
SELECT T1.RecordID, T1.Location, T1.Type, T1.Size
FROM YourTable AS T1 INNER JOIN YourTable AS T2
ON T1.Location = T2.Location
AND T1.Type = T2.Type
AND T2.Size >= T1.Size
GROUP BY T1.RecordID, T1.Location, T1.Type, T1.Size
HAVING COUNT(*) <=3
ORDER BY T1.Location, T1.Type, T1.Size DESC;
Ken Sheridan, Stafford, England
- Edited by Ken Sheridan Wednesday, January 4, 2017 5:47 PM
- Marked as answer by GMcElroy20 Wednesday, January 4, 2017 6:21 PM
Wednesday, January 4, 2017 5:43 PM -
theDBguy,
Thanks for the help but I'm getting an error saying "You tried to execute a query that does not include the specified expression 'RecordID' as part of an aggregate function." I also get the same error for the 'Size' field too. I'm sorry this is above my head. Any suggestions?
Thanks!
Wednesday, January 4, 2017 6:13 PM -
Ken,
Thanks for the SQL statement. I didn't see it before. It worked like a charm!
Wednesday, January 4, 2017 6:20 PM -
Hi,
Sorry it didn't work. I like Ken's solution too. Good luck with your project.
Wednesday, January 4, 2017 6:25 PM