首页 >数据库 >mysql教程 >如何使用 MySQL 仅选择分组表中的最后一个值?

如何使用 MySQL 仅选择分组表中的最后一个值?

Linda Hamilton
Linda Hamilton原创
2024-11-03 08:29:03524浏览

How to Select Only the Last Value in a Grouped Table Using MySQL?

在 MySQL 中使用 GROUP BY 仅选择最后一个值

问题:

在包含多行考勤的表中对于用户数据,目标是仅获取每个用户的最后一次出勤值,按用户 ID 分组。但是,使用带有 order 子句的 GROUP BY 不会返回所需的结果。

解决方案:

要仅选择最后一个出勤值,请使用以下方法:

  1. 创建一个子查询来选择每行的 ID、时间戳和出勤率。按时间戳降序对行进行排序,以检索每个用户的最新考勤情况。
<code class="sql">SELECT id_member, MAX(timestamp) AS last_timestamp, attendance
FROM view_event_attendance
WHERE id_event = 782
GROUP BY id_member
ORDER BY last_timestamp DESC;</code>
  1. 使用 IN 将子查询连接回原始表以选择时间戳匹配的行子查询中的last_timestamp。
<code class="sql">SELECT id_branch_channel, id_member, attendance, timestamp, id_member
FROM view_event_attendance
WHERE (id_member, last_timestamp) IN (
    SELECT id_member, MAX(timestamp) AS last_timestamp
    FROM view_event_attendance
    WHERE id_event = 782
    GROUP BY id_member
    ORDER BY last_timestamp DESC
);</code>
  1. 或者,使用相关子查询来选择每个用户的最后一次出席。
<code class="sql">SELECT id_branch_channel, id_member, attendance, timestamp, id_member
FROM view_event_attendance AS t1
WHERE timestamp = (SELECT MAX(timestamp)
                   FROM view_event_attendance AS t2
                   WHERE t1.id_member = t2.id_member AND t1.id_event = t2.id_event);</code>

注意:此解决方案避免使用带有 ORDER BY 子句的 GROUP BY,这对于大型表来说效率低下。

以上是如何使用 MySQL 仅选择分组表中的最后一个值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn