mariadb 按列条件显示SQL语句的DISTINCT值

qnyhuwrf  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(154)

我向你介绍了我处理过的列条件下DISTINCT值的问题,但我无法提供任何解决方法。
问题是我这里有两个斯蒂芬,但我不想重复:问题:

id  vehicle_id  worker_id    user_type   user_fullname
9   1              NULL         external_users     John Dalton   
10  1               16          employees          Mike            
11  1                1          employees          Stephen         
12  2               173         employee           Nicholas        
13  2                1          employee           Stephen         
14  1              NULL         external_users     Peter      
**

所需输出:**

id  vehicle_id  worker_id    user_type   user_fullname
9   1              NULL         external_users     John Dalton   
10  1               16          employees          Mike                 
12  2               173         employee           Nicholas        
13  2                1          employee           Stephen         
14  1              NULL         external_users     Peter

我试过CASE语句,但没有成功。当我按worker_id分组时,它删除了另一个重复项,所以我发现它需要按一些特殊条件分组。如果有人能给我一些提示,我将如何解决这个问题,我将非常感激。
谢氏!

6psbrbz9

6psbrbz91#

此表中没有重复的行。Stephen出现两次并不会使它们重复,因为ID、VEHICLE_ID和USER_TYPE不同。
您需要做的是决定如何标识您希望在输出中看到的Stephen记录。它是否是具有最高VEHICLE_ID的记录?“最新”记录,即具有最高ID的记录?
您将在窗口函数中使用该规则对条件中的行进行排序,然后使用行号筛选出您想要的结果。

select id, vehicle_id, worker_id, user_type, user_fullname
from (
    select id, vehicle_id, worker_id, user_type, user_fullname,
        row_number() over (partition by worker_id, user_fullname order by id desc) n
    from user_vehicle
) t
where t.n = 1

相关问题