Access/Node-RED单查询需求:按日期取MAC地址最新记录并统计条数
Access SQL 单查询实现需求方案
正确查询语句
假设你的表名为DeviceRecords(请替换为实际表名),以下是满足需求的单条SQL查询:
SELECT main.MACAddress, main.tDate, total.TotalRecords FROM -- 获取指定日期内每个MAC的最新时间 (SELECT MACAddress, MAX(tDate) AS LatestTime FROM DeviceRecords WHERE tDate >= #2023/07/31# AND tDate < #2023/08/01# GROUP BY MACAddress) AS latest_times INNER JOIN DeviceRecords AS main ON latest_times.MACAddress = main.MACAddress AND latest_times.LatestTime = main.tDate -- 关联总条数统计结果,每条记录附加总数 CROSS JOIN ( SELECT COUNT(*) AS TotalRecords FROM ( SELECT MACAddress FROM DeviceRecords WHERE tDate >= #2023/07/31# AND tDate < #2023/08/01# GROUP BY MACAddress ) AS unique_macs ) AS total
关键逻辑说明
- 日期筛选:用
tDate >= #2023/07/31# AND tDate < #2023/08/01#替代直接等于,避免tDate包含时间部分时漏判或误判(比如2023/07/31 14:30的记录不会被=过滤掉)。Access中日期必须用#包裹。 - 获取每个MAC的最新记录:通过子查询
latest_times分组统计每个MAC在指定日期内的最大tDate,再和原表关联,拿到对应MAC的最新完整记录。 - 统计总条数:内层
unique_macs子查询先统计符合条件的唯一MAC数量(即最终返回的记录条数),再通过CROSS JOIN将总条数附加到每条明细记录中。
简化场景调整
如果你的tDate字段仅包含日期(无时间部分),可以将日期条件简化为tDate = #2023/07/31#。
内容的提问来源于stack exchange,提问作者Marius
相关产品推荐
相关产品推荐

