You need to enable JavaScript to run this app. MS Access 按指定ModelLog统计当前/上一小时匹配数据行数的查询写法
优惠活动
大模型
产品
解决方案
定价
更多

MS Access 按指定ModelLog统计当前/上一小时匹配数据行数的查询写法

MS Access 时间区间匹配统计查询实现

核心查询逻辑说明

两个统计需求均可通过半开半闭区间判断实现,避免整点边界值的统计遗漏或重复计算,且兼容OleDb连接Access的参数传值规则。

1. 统计当前系统小时内的数据行数

先计算当前小时的时间边界:

  • 区间起点:当前系统时间截断到小时整,即保留年、月、日、当前小时数,分钟、秒、毫秒全部置0
  • 区间终点:上述起点加1小时
    对应C#实现代码:
// 计算时间边界
DateTime currentHourStart = new DateTime(
    DateTime.Now.Year,
    DateTime.Now.Month,
    DateTime.Now.Day,
    DateTime.Now.Hour,
    0, 0
);
DateTime currentHourEnd = currentHourStart.AddHours(1);

// 执行统计查询
string countSql = @"
SELECT COUNT(*)
FROM timer
WHERE DateTimeLog >= @startTime
  AND DateTimeLog < @endTime
";
OleDbCommand countCmd = new OleDbCommand(countSql, connection);
countCmd.Parameters.Add("@startTime", OleDbType.DBTimeStamp).Value = currentHourStart;
countCmd.Parameters.Add("@endTime", OleDbType.DBTimeStamp).Value = currentHourEnd;
int rowCount = Convert.ToInt32(countCmd.ExecuteScalar());

2. 统计上一小时区间内匹配指定ModelLog值的总行数

上一小时的时间边界计算逻辑:

  • 区间起点:当前小时起点往前推1小时的整点值
  • 区间终点:当前小时的整点值(和上述当前小时起点一致)
  • 匹配条件:叠加ModelLog字段等于指定值的过滤规则
    对应C#实现代码:
DateTime lastHourStart = currentHourStart.AddHours(-1);
string targetModel = mlb.Text; // 替换为实际需要匹配的ModelLog值

string modelCountSql = @"
SELECT COUNT(*)
FROM timer
WHERE DateTimeLog >= @startTime
  AND DateTimeLog < @endTime
  AND ModelLog = @modelValue
";
OleDbCommand modelCountCmd = new OleDbCommand(modelCountSql, connection);
modelCountCmd.Parameters.Add("@startTime", OleDbType.DBTimeStamp).Value = lastHourStart;
modelCountCmd.Parameters.Add("@endTime", OleDbType.DBTimeStamp).Value = currentHourStart;
modelCountCmd.Parameters.Add("@modelValue", OleDbType.VarChar).Value = targetModel;
int lastHourModelRowCount = Convert.ToInt32(modelCountCmd.ExecuteScalar());

注意事项

  • 现有插入代码中DateTime.Now.ToString("g")再重新Parse为日期的步骤属于冗余操作,直接将DateTime.Now赋值给日期类型参数即可,可避免因系统区域格式差异导致的日期解析错误
  • 不要使用Between做时间区间判断,否则整点时刻刚好等于区间终点的日志记录会被重复统计
  • 若不依赖C#传参直接写纯Access SQL,可使用DateSerial、DateAdd、Hour内置函数计算时间边界,但传参方式的执行效率更高,也不受数据库区域设置影响
  • OleDb连接MS Access时不存在命名参数匹配机制,所有参数严格按照SQL语句中出现的先后顺序赋值,顺序错误会直接导致查询逻辑失效

内容的提问来源于stack exchange,提问作者Jia Soon Loo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 20:06:05