一个SQL查找数据的问题,Access的

sosoben 2014-08-29 09:35:00
A MyTime B值 C值 Status
点檢Wide 2014/8/25 7:53 0.04 OK
点檢Tele 2014/8/25 7:54 -0.03 OK
点檢Tele 2014/8/25 19:56 -0.02 OK
点檢Wide 2014/8/25 19:57 0.06 OK
点檢Tele 2014/8/26 7:57 -0.1 NG
点檢Tele 2014/8/26 7:57 -0.04 OK
点檢Wide 2014/8/26 7:58 0.06 OK
点檢Tele 2014/8/26 19:51 -0.03 OK
点檢Wide 2014/8/26 19:52 0.06 OK
点檢Tele 2014/8/26 20:02 -0.04 NG
点檢Tele 2014/8/26 20:03 -0.03 OK
点檢Wide 2014/8/27 7:50 0.05 OK
点檢Tele 2014/8/27 7:50 -0.03 OK
点檢Tele 2014/8/27 19:52 -0.02 OK
点檢Wide 2014/8/27 19:53 0.06 OK

为免分列格式错乱 贴出示意图


查找数据的规则就有点复杂了
每天有两个时段 早上7:00-9:00 和晚上7:00-9:00
我要分别提取每天Tele与WIde这两个时段里面最晚的一条数据
怎么写sql呢?



最终想要的效果如下 ,黄色的是不要显示的数据






...全文
307 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
想飞的菜鸟 2014-10-10
  • 打赏
  • 举报
回复
返回日期部分:DateValue(表达式) 返回时间部分:TimeValue(表达式)
ACMAIN_CHM 2014-09-13
  • 打赏
  • 举报
回复
引用 6 楼 sosoben 的回复:
[quote=引用 5 楼 ACMAIN_CHM 的回复:] 你可以用 int(datetime) 来处理。
int(datetime) 可以获取其日期部分吗?[/quote]亲自动手试一下不就知道了?
sosoben 2014-09-13
  • 打赏
  • 举报
回复
引用 8 楼 WWWWA 的回复:
增加冗余字段,保存 format、HOUR等等结果,在此字段上建立索引
Access就没有只获取日期部分的函数?
wwwwb 2014-09-13
  • 打赏
  • 举报
回复
int(datetime) 可以获取其日期部分吗?: 可以
WWWWA 2014-09-12
  • 打赏
  • 举报
回复
增加冗余字段,保存 format、HOUR等等结果,在此字段上建立索引
sosoben 2014-09-12
  • 打赏
  • 举报
回复
引用 4 楼 WWWWA 的回复:
呵呵,看成MYSQL了, format不能用到索引
那用什么能用索引呢?
sosoben 2014-09-12
  • 打赏
  • 举报
回复
引用 5 楼 ACMAIN_CHM 的回复:
你可以用 int(datetime) 来处理。
int(datetime) 可以获取其日期部分吗?
WWWWA 2014-08-29
  • 打赏
  • 举报
回复
自行修改 select * from tt a where not exists(select 1 from tt where a.a=a and date(a.mytime)=date(mytime) and a.mytime<mytime and hour(mytime) between 7 and 9) and hour(a.mytime) between 7 and 9 晚上7:00-9:00 and hour(a.mytime) between 19 and 21 2个SQL UNION
ACMAIN_CHM 2014-08-29
  • 打赏
  • 举报
回复
你可以用 int(datetime) 来处理。
WWWWA 2014-08-29
  • 打赏
  • 举报
回复
呵呵,看成MYSQL了, format不能用到索引
sosoben 2014-08-29
  • 打赏
  • 举报
回复
引用 1 楼 WWWWA 的回复:
自行修改 select * from tt a where not exists(select 1 from tt where a.a=a and date(a.mytime)=date(mytime) and a.mytime<mytime and hour(mytime) between 7 and 9) and hour(a.mytime) between 7 and 9 晚上7:00-9:00 and hour(a.mytime) between 19 and 21 2个SQL UNION
经过再次调试,发现是date函数不正确,access不支持date获取日期部分,所以我用了 format(a.mytime,"YY/MM/DD") 代替就可以了 只是效率有待测试,谢谢
sosoben 2014-08-29
  • 打赏
  • 举报
回复
引用 1 楼 WWWWA 的回复:
自行修改 select * from tt a where not exists(select 1 from tt where a.a=a and date(a.mytime)=date(mytime) and a.mytime<mytime and hour(mytime) between 7 and 9) and hour(a.mytime) between 7 and 9 晚上7:00-9:00 and hour(a.mytime) between 19 and 21 2个SQL UNION
无论我怎么改,都有以下错误,在程序中或access中都是 用于函数参数的个数不对 在查询表达式 '(a.a=a) and (date(a.mytime)=date(mytime)) and (a.mytime<mytime) and (hour(mytime) between 7 and 9' 中 用于函数参数的个数不对 在查询表达式 'a.a=a and date(a.mytime)=date(mytime) and a.mytime<mytime and hour(mytime) between 7 and ' 中。 我看看有没有理解错你的逻辑,为免表a跟字段a重复,表用T表示

select * from tt T where not exists
(
   select 1 from tt where 
    (
        T.a=a and date(T.mytime)=date(mytime) and T.mytime<mytime and 
       (hour(mytime) between 7 and 9)     
    )
)
and hour(T.mytime) between 7 and 9     
s是这样吗?

7,713

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧