Mysql 如何按用户ID对每天最新的日期时间记录进行分组?
就这个问题而言,我在MySQL表中有三个字段:Mysql 如何按用户ID对每天最新的日期时间记录进行分组?,mysql,sql,greatest-n-per-group,Mysql,Sql,Greatest N Per Group,就这个问题而言,我在MySQL表中有三个字段:id、userId、和loginDate(DATETIME)。我想每天返回每个用户id的最新记录。如何创建查询以在下面的B部分中执行以下操作 A.记录 身份证件 用户ID 罗吉恩代特 1. 5. 2021-01-01 00:05:50 2. 7. 2021-01-01 06:06:50 3. 5. 2021-01-01 06:34:50 4. 3. 2021-01-02 06:56:76 5. 3. 2021-01-02 15:46:52 您应该在一
id
、userId
、和loginDate
(DATETIME)。我想每天返回每个用户id
的最新记录。如何创建查询以在下面的B部分中执行以下操作
A.记录
身份证件
用户ID
罗吉恩代特
1.
5.
2021-01-01 00:05:50
2.
7.
2021-01-01 06:06:50
3.
5.
2021-01-01 06:34:50
4.
3.
2021-01-02 06:56:76
5.
3.
2021-01-02 15:46:52
您应该在一些聚合函数的帮助下使用groupby
SELECT max(id) AS id, userId, max(loginDate) AS loginDate FROM table GROUP BY userId ORDER BY id ASC;
返回:
id userId loginDate
2 7 2021-01-01 06:06:50
3 5 2021-01-01 06:34:50
5 3 2021-01-02 15:46:52
说明:groupby
get被您的查询搞糊涂了,因为多行可能匹配。使用max()
aggregate函数可以只返回最新的行数据。对于MySQL 8,您可以使用row\u number
以降序排列一天内的时间戳,然后选择每组的第一项。没有复杂的聚合、限制和联接,它只是根据顺序和分组分配数字,行的其余部分不变
id |用户id |登录数据| |
-: | -----: | :------------------ | ---:
2 | 7 | 2021-01-01 06:06:50 | 1
3 | 5 | 2021-01-01 06:34:50 | 1
5 | 3 | 2021-01-02 15:46:52 | 1
我不知道你在标题中的意思。清楚的解释和结果总是有帮助的。这能回答你的问题吗。结合DATE(loginDate)
它肯定会完成工作。@GordonLinoff-抱歉,请再次查看问题。我无意中点击了save,毫无疑问我已经准备好了@astentx-抱歉,请再次查看问题。我无意中点击了save,毫无疑问我已经准备好了@GrumpyCrouton谢谢,请看下面。但它不会生成“按日期结束”行。抱歉,请再次查看问题。我无意中点击了save,毫无疑问我已经准备好了@脾气暴躁的克劳顿-我试过这样的东西。它每天不会按userId返回最后一条不同的记录…它会返回每个userId的倍数。
with a as (
select 1 as id, 5 as userid, timestamp '2021-01-01 00:05:50' as logindate union all
select 2, 7, timestamp '2021-01-01 06:06:50' union all
select 3, 5, timestamp '2021-01-01 06:34:50' union all
select 4, 3, timestamp '2021-01-02 06:56:56' union all
select 5, 3, timestamp '2021-01-02 15:46:52'
)
, rn as (
select a.*,
row_number() over(
partition by
userid,
date(logindate)
order by
logindate desc
) as __rn
from a
)
select *
from rn
where __rn = 1
order by userid desc
id | userid | logindate | __rn
-: | -----: | :------------------ | ---:
2 | 7 | 2021-01-01 06:06:50 | 1
3 | 5 | 2021-01-01 06:34:50 | 1
5 | 3 | 2021-01-02 15:46:52 | 1