这样的SQL语句该怎么写?

KissApple 2005-07-28 04:16:21
这个问题在这个版提过好几次了,但是由于我这边功能的时常改动,所以总是不能最终解决,现在把这个问题重新提出来,希望能有人帮我解决一下.

说明:这个系统相当于是在线式巡更系统,到了时间报警点就必须打电话给值班室,否则就会给出提示,我需要的这个SQL语句只需要将某一字段设置为1就可以了.

表结构
表名:FenJi
字段名:Phynum,FjiNum,PointName,StartTime,SpaTime,Flags,wucha
(解释:分机物理号,分机号,报警点,开始时间,报警间隔,标志位,误差)

表名:XinXi
字段名:XDate,XTime,Banci,Pointname,PerNum,Xinxi)
(解释:报警日期,报警时间,班次,报警点,报警人,信息)

首先设置在Fenji表中设置报警点的报警开始时间,报警间隔,误差
比如从2005-7-28 15:00:00开始每隔30分钟(误差为5分钟)打一次电话给值班室,就是说正常情况下14:55:00--15:05:00 15:25:00--15:35:00 15:55:00--16:05:00 16:25:00--16:35:00该报警点应该打电话给值班室,在15:05:00这个时刻如果从14:55:00开始到15:05:00值班室都没有接到该报警点的电话那么就将标志位flags置为1

参考数据

Fenji
PhyNum FjiNum pointname starttime spatime flags wucha
1 801 东门 2005-7-1 12:00:00 30 0 10
2 802 西门 2005-7-28 12:00:00 30 1 5
3 803 南门 2005-8-8 12:00:00 5 <Null> 1


Xinxi
Xdate xtime banci pointname pernum xinxi
2005-7-28 12:00:00 上午 东门 F0025 正常
2005-7-28 14:32:00 下午 东门 F0030 正常
2005-7-28 11:58:00 上午 西门 F0011 正常
2005-7-28 13:00:00 上午 西门 F0055 正常

东门上次报警时间是14:32:00,下次报警时间应该是15:00:00, 到了15:10:00如果从14:50:00开始都没有该点的报警信息的话就将该点flags置1

西门上次报警时间是11:58:00,下次报警时间应该是12:30:00, 到了12:35:00如果从12:25:00开始都没有该点的报警信息的话就将该点flags置1

南门由于还没有到报警开始时间,所以flags值为空



...全文
97 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaya1979 2005-07-29
  • 打赏
  • 举报
回复
update fenji Set Flags = b.Flag from fenji a inner join ( select pointname,flag=case when (datediff([n],starttime,getdate())>0 and datediff( [n],starttime,getdate()) % spatime =wucha and datediff([n],xtime,dateadd([n],- 2 * wucha,getdate()) )>0 ) then 1 else 0 end From ( select a.pointname,a.starttime,convert(datetime,max(b.xdate+' '+b.xtime),120) as xtime,a.spatime ,a.wucha from fenji a inner join xinxi b on a.pointname=b.pointname and a.starttime<getdate() group by a.pointname,a.starttime,a.spatime ,a.wucha)t )b on a.PointName=b.PointName
KissApple 2005-07-28
  • 打赏
  • 举报
回复
没人帮我吗?

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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