当前位置: 首页 > news >正文

ACCESS多个时间段查询,只取整点,30分数据

ACCESS多个时间段查询? 比如要求6-26 8:00到18:00; 6-27 9:00到13点

当需要查询多个时间段内符合条件(0 分或 30 分)的记录时,可以使用OR连接多个时间区间条件,同时保留分钟的筛选条件。

优化后的 SQL 查询如下:

SELECT CXRecord.*, Minute([DT]) AS 分钟
FROM CXRecord
WHERE Minute([DT]) IN (0, 30)  -- 保留0分或30分的条件AND (-- 第一个时间段:6-26 8:00到18:00(CXRecord.DT >= #6/26/2024 8:00:00# AND CXRecord.DT <= #6/26/2024 18:00:00#)OR-- 第二个时间段:6-27 9:00到13:00(CXRecord.DT >= #6/27/2024 9:00:00# AND CXRecord.DT <= #6/27/2024 13:00:00#)-- 可继续添加更多时间段,用OR连接)
ORDER BY CXRecord.DT;

优化说明:

  1. 逻辑清晰:用括号明确区分 "分钟条件" 和 "多个时间段条件",层次更清晰
  2. 精确性:使用>=<=替代><,确保边界时间点(如 8:00:00、18:00:00)被包含
  3. 可扩展性:如需添加更多时间段,只需按照相同格式用OR连接即可

如果需要添加更多时间段(例如 6-28 10:00 到 15:00),只需继续添加:

OR
(CXRecord.DT >= #6/28/2024 10:00:00# AND CXRecord.DT <= #6/28/2024 15:00:00#)

这种写法既保留了对 0 分 / 30 分的筛选,又能灵活支持多个不连续的时间区间,且性能表现良好。

你的 SQL 查询已经能够实现基本需求,不过可以从以下几个方面进行优化,提升可读性和执行效率:

优化方案 1:简化条件表达式

去掉不必要的括号,使查询更简洁:

SELECT CXRecord.*, Minute([DT]) AS 分钟
FROM CXRecord
WHERE Minute([DT]) In (0, 30) AND CXRecord.DT > #6/26/2024 14:00:00# AND CXRecord.DT < #6/28/2024 18:00:00#
ORDER BY CXRecord.DT;

优化方案 2:使用日期函数增强可读性

对于日期条件,可以使用DateSerialTimeSerial函数使日期范围更清晰:sql

SELECT CXRecord.*, Minute([DT]) AS 分钟
FROM CXRecord
WHERE Minute([DT]) In (0, 30) AND CXRecord.DT > DateAdd("h", 14, DateSerial(2024, 6, 26))AND CXRecord.DT < DateAdd("h", 18, DateSerial(2024, 6, 28))
ORDER BY CXRecord.DT;

优化方案 3:考虑索引优化(性能提升关键)

如果CXRecord表数据量较大,建议:

  1. DT字段创建索引(可显著提升日期范围查询的速度)
  2. 尽量避免在索引字段上使用函数(如Minute([DT])),因为这会导致索引失效

如果要兼顾索引利用,可以将查询拆分为两个条件的组合(逻辑上等效但可能更高效):

SELECT CXRecord.*, Minute([DT]) AS 分钟
FROM CXRecord
WHERE (CXRecord.DT > #6/26/2024 14:00:00# AND CXRecord.DT < #6/28/2024 18:00:00#)AND (Minute([DT]) = 0 OR Minute([DT]) = 30)
ORDER BY CXRecord.DT;

优化说明:

  1. 可读性:减少冗余括号,使用更规范的时间格式(添加秒数占位符00
  2. 性能:索引对大表查询影响显著,DT字段加索引后,日期范围过滤会更快
  3. 精确性:明确写出00:000:0更规范,避免 Access 解析歧义

选择哪种方案取决于你的数据量大小和维护需求,小表查询用简化版即可,大表查询建议配合索引使用优化方案 3。

http://www.lryc.cn/news/621254.html

相关文章:

  • 【读代码】深度解析 context-engineering-intro:开源上下文工程实践原理与应用
  • 【Functions】enumerate的用法
  • 机器学习-基础入门:从概念到核心方法论
  • Data Augmentation数据增强
  • 从0到1:C++ 语法之 nullptr
  • 机器学习内容总结
  • 机器学习初学
  • 前端vue框架
  • 机器学习知识总结
  • 智能体评测技术与实践:从评估维度到DeepEval实战指南
  • 20250814,通义万相,无限生成权限(慢速)
  • Linux中的日志管理
  • Linux中tty与8250-uart的虐恋(包括双中断发送接收机制)
  • 前端包管理工具
  • hive加载csv中字段含有换行符的处理方法
  • Spring-cloud-openfeign-设置超时时间
  • 数据结构:用两个栈模拟队列(Queue Using 2 Stacks)
  • 8.14网络编程——TCP通信基础
  • 【22-决策树】
  • 零基础-动手学深度学习-10.3. 注意力评分函数
  • 20道CSS相关前端面试题及答案
  • torch.nn中Sequential的使用
  • 【代码随想录day 20】 力扣 538.把二叉搜索树转换为累加树
  • CMake语法与Bash语法的区别
  • 扩展用例-失败的嵌套
  • 流式数据服务端怎么传给前端,前端怎么接收?
  • jenkins在windows配置sshpass
  • 设计模式笔记_行为型_状态模式
  • 【JavaEE】多线程 -- 线程状态
  • 纸箱拆垛:物流自动化中的“开箱密码”与3D视觉的智能革命