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;
我遇到了一个结构如下的数据库 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;