如何在Microsoft Access SQL中按Trip_ID分组实现Location滚动计数
Access 2016按Trip_ID分组实现Location滚动计数方案
核心实现思路
通过给DSUM函数添加分组限定条件,仅统计当前Trip_ID分组内、当前记录及之前的同Location出现次数,替代全表统计逻辑。
具体操作步骤
- 打开目标表,创建新查询(切换到SQL视图更高效)。
- 编写SQL语句,新增计算字段实现分组滚动计数:
假设你的表名为TripData,SQL代码示例如下:
SELECT ID, Date, Weekday, Trip_ID, Day, Location, DSUM("*", "TripData", "Trip_ID = '" & [Trip_ID] & "' AND Location = '" & [Location] & "' AND ID <= " & [ID]) AS RollingCount FROM TripData ORDER BY Trip_ID, ID;
参数适配说明
- 若
Trip_ID为数字类型,去掉条件中的单引号:Trip_ID = " & [Trip_ID] & " AND ... - 若
Location为数字类型,同样去掉对应单引号 - 若
ID未按记录顺序生成,可改用Date+ID组合作为排序依据,将ID <= " & [ID]替换为Date <= #" & [Date] & "# AND ID <= " & [ID],确保计数顺序符合业务逻辑
优化方案(大数据量场景)
如果表中数据量较大(万条以上),DSUM逐行计算可能性能不足,可改用相关子查询实现:
SELECT t1.ID, t1.Date, t1.Weekday, t1.Trip_ID, t1.Day, t1.Location, (SELECT COUNT(*) FROM TripData t2 WHERE t2.Trip_ID = t1.Trip_ID AND t2.Location = t1.Location AND t2.ID <= t1.ID) AS RollingCount FROM TripData t1 ORDER BY t1.Trip_ID, t1.ID;
相关子查询在部分场景下性能优于DSUM,可根据实际数据量测试选择。
内容的提问来源于stack exchange,提问作者huskypride
相关产品推荐
相关产品推荐

