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

MS Access SQL日期字段修改问题及最终可行查询方案

MS Access 日期转换与雷击次数统计问题解决

需求

处理继承数据表,日期与24小时制时间为单独字段:

  • 若时间(PDT字段)处于前一日08:00至当日07:59区间,保留当前日期;若时间≥08:00,日期加1
  • 将PSA、转换后的日期、雷击次数写入新表Strikes_08-08

源数据表(PSA_Ltg)

PSA    Date     GMT    PDT     polarity   lat    lon
E5     6/28/2023           2130    P          42.33  -119.33
E5     6/28/2023        400    N          42.01  -119.15
E5     6/27/2023       1550    N          42.00  -118.15
E5     6/27/2023        745    P          42.00  -119.61

初始查询与问题

初始查询语句:

SELECT PSA_Ltg.PSA, PSA_Ltg.Date, 
       Switch(PSA_Ltg.[PDT]<800, PSA_Ltg.[Date], PSA_Ltg.[PDT]>=800, PSA_Ltg.[Date]+1) AS NewDate, 
       Count(PSA_Ltg.polarity) AS Strikes 
INTO [Strikes_08-08]
FROM PSA_Ltg
GROUP BY PSA_Ltg.PSA, PSA_Ltg.Date;

运行时触发错误:

Your query does not include the specified expression
'Switch(PSA_ltg.[PDT]<0800,PSA_Ltg.[Date],PSA_Ltg.[PDT]>=800,PSA_Ltg.[Date]+1)'
as part of an aggregate function.

移除Switch语句后查询可运行,但丢失日期重分配功能,输出不符合需求:

Strikes_08-08
PSA Date      Strikes
E5  6/27/2023   2
E5  6/28/2023   1
E5  6/29/2023   1

期望输出

Strikes_08-08
PSA Date      Strikes
E5  6/27/2023   1
E5  6/28/2023   2
E5  6/29/2023   1

最终可运行查询

SELECT PSA_Ltg.PSA, 
       Switch(PSA_Ltg.[PDT]<800, PSA_Ltg.[Date], PSA_Ltg.[PDT]>=800, PSA_Ltg.[Date]+1) AS NewDate, 
       Count(PSA_Ltg.polarity) AS Strikes 
INTO [Strikes_08-08]
FROM PSA_Ltg
GROUP BY PSA_Ltg.PSA, 
         Switch(PSA_Ltg.[PDT]<800, PSA_Ltg.[Date], PSA_Ltg.[PDT]>=800, PSA_Ltg.[Date]+1);

问题原因与解决逻辑

错误根源是:Access的GROUP BY子句必须包含SELECT中所有非聚合函数的字段/表达式。初始查询中SELECT包含计算后的NewDate(Switch表达式),但GROUP BY仅用了原Date字段,导致逻辑不匹配。修改后将Switch表达式直接加入GROUP BY,确保分组依据与输出的日期逻辑一致,即可正确统计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:20:13