Mysql 如何按用户ID对每天最新的日期时间记录进行分组?

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 您应该在一

就这个问题而言,我在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
您应该在一些聚合函数的帮助下使用
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