Sql 返回access中包含重复项的行中的最高值

Sql 返回access中包含重复项的行中的最高值,sql,ms-access,Sql,Ms Access,我似乎找不到答案。。。 我有一张桌子 users name | cat 1 | cat 2 | cat 3 ------------------------------------------- Karl 1 Karl medium T 1 James high T 1

我似乎找不到答案。。。 我有一张桌子

users

name | cat 1 | cat 2 | cat 3 
-------------------------------------------
Karl                        1              
Karl   medium      T        1                        
James  high        T        1                                              
James  medium      T        1                    
James                       1                 
Toni   medium      T        1                       
Toni   high        T        1                  
Toni                        1              
Klara                       1    
Laura                       1                
Thomas                      1                    
Tobi   medium      T        1                                  
Tobi                        1                  
我希望结果是这样的: 保存每个人的记录,但仅保留cat 1中最高值的记录的表格

users

name | cat 1 | cat 2 | cat 3 
-------------------------------------------             
Karl   medium      T        1                        
James  high        T        1                                                                                  
Toni   high        T        1                               
Klara                       1    
Laura                       1                
Thomas                      1                    
Tobi   medium      T        1                                                  
我得到的最接近的解决方案是这个,但它只返回所有最低值,当将MIN更改为MAX时,它返回所有行

SELECT DISTINCT * FROM users
WHERE users.[cat 1] IN
(SELECT MIN([cat 1]) FROM users GROUP BY [name])

需要唯一标识符字段-应提供自动编号。然后使用嵌套的TOP N查询。处理Null,因为Null首先按升序排序

如果高和中是唯一的值,请考虑:

SELECT * FROM users
WHERE ID IN
(SELECT TOP 1 ID FROM users AS Dupe WHERE Dupe.Name=Users.Name 
    ORDER BY Nz([Cat 1],"ZZ"));
否则,请将文本值转换为数字:

SELECT * FROM users
WHERE ID IN
(SELECT TOP 1 ID FROM users AS Dupe WHERE Dupe.Name=Users.Name 
    ORDER BY Switch([cat 1]="high",1, [cat 1]="medium",2, [cat 1]="low",3, True,4));