You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL实现按CardNumber分组取LastEntrance最新行

按CardNumber去重保留最新入场记录的SQL实现

可以通过标准SQL语句实现该需求,假设你的表名为access_record,以下给出两种常用的兼容写法:

  • 窗口函数写法(适配MySQL 8.0+、PostgreSQL、SQL Server、Oracle等所有支持窗口函数的现代数据库)
SELECT CardNumber, Name, LastName, LastEntrance
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY CardNumber ORDER BY LastEntrance DESC) AS row_rank
    FROM access_record
) temp_table
WHERE row_rank = 1;

逻辑说明:用ROW_NUMBER()窗口函数对每个CardNumber的分组内记录,按LastEntrance倒序排序,排序值为1的就是该分组下最新的记录,外层查询只保留排序值为1的行即可。如果同一个CardNumber存在多条LastEntrance完全相同的最新记录,该写法只会返回其中一条;如果需要返回所有同时间的最新记录,可以把ROW_NUMBER()替换为RANK()。

  • 关联子查询写法(兼容MySQL 5.x等所有不支持窗口函数的低版本数据库)
SELECT a.*
FROM access_record a
INNER JOIN (
    SELECT CardNumber, MAX(LastEntrance) AS latest_entrance
    FROM access_record
    GROUP BY CardNumber
) b ON a.CardNumber = b.CardNumber AND a.LastEntrance = b.latest_entrance;

逻辑说明:先通过子查询统计出每个CardNumber对应的最新LastEntrance值,再将原表和子查询结果按卡号和最新时间关联,匹配到的就是每个卡号对应的最新完整记录,该写法会返回同一个卡号下所有同时间的最新记录。

内容的提问来源于stack exchange,提问作者serkanz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:06:03