sql - 选择一列中的最大值加上同一表中的其他列
问题描述
我遇到了一个结构如下的数据库表:每次用户登录时,都会在数据库中添加一条新记录,其中包含他们的用户名、设备、登录的 unix 时间戳以及其他 10 列内容。对于每个用户,我想选择他们最近的登录。所以我这样做:
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
问题就在这里。我想在选择中添加另一列,所以我也添加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
有什么我没有考虑的,因为我想选择 1 列的最大值,但也要获得整行?
解决方案
不要认为“聚合”。想想“过滤”。然后:
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;
推荐阅读
- mysql - 如何在 .sql 脚本中导出 Laravel 数据库
- java - 为什么 JButton 不显示?
- python - 如何消除频率之间的“点击”?
- ios - 单例中的@Published 属性在第一个事件之后不发出事件
- asp.net - 如何将 JObject 作为对象添加到实体框架
- mysql - 有没有办法在 GCP 中创建非只读 Cloud SQL MySQL 副本?
- matlab - 如何解决 MATLAB Simulink 的定点工具中的下溢(/上溢)问题?
- r - 在 R 中将数据框项从字符串转换为 int 时出现意外行为
- reactjs - 失败的道具类型:提供给`ForwardRef(Select)`的无效道具`children`,需要一个ReactNode
- html - 需要用参数设置一个div的背景