Select 一列中的最大值加上同一列中的其他列 table

Select max value in one column plus other columns in same table

我遇到了一个结构如下的数据库 table:每次用户登录时,都会将一条新记录添加到数据库中,其中包含用户名、设备、登录的 unix 时间戳以及其他 10 个列东西的。对于每个用户,我想 select 他们最近的登录。所以我这样做:

with query1 as (
    select 
        user,
        MAX(last_login)
    from 
        users_table 
    group by 
        user
)

作为检查,每个用户只关联一行,他们的最新登录:

select count(distinct user) from query1  == select count(user) from query1

问题就出在这里。我想在 select 中添加另一列,所以我也添加到 group by ...

with query1 as (
    select 
        user,
        device,  
        MAX(last_login)
    from 
        users_table 
    group by 
        user,
        device
)

则长度不相等。出于我问这个的原因,有些用户与单行相关联,有些用户与多行相关联。

select count(distinct user) from query1  != select user from query1 

有什么我没有考虑的,因为我想 select 1 列的最大值,但也得到整行?

别想"aggregation"。想想"filtering"。那么:

select u.*
from users_table u
where u.last_login = (select max(u2.last_login)
                      from users_table u2
                      where u2.user = u.uer
                     );

如果你想保证每个用户一行,你可以使用row_number():

select u.*
from (select u.*
             row_number() over (partition by user order by last_login desc) as seqnum
      from users_table u
     ) u
where seqnum = 1;