wodeqq584958184
wodeqq584958184
采纳率77.8%
2018-04-22 15:05

关于一个SQL server项目编程问题

80
已采纳

问题或许很很难很复杂,但是我还是希望有人能帮我解决下,本人是刚刚出来学校的实习生,现在实习的公司,我上司安排了个项目给我,但是没有人带,我上司也只是懂接触过一点点SQL server,但并不是专家,现在项目凭着我自己翻寻各种百度和CSDN,完成了一半进度,但是现在真的遇到难题了,不知道怎么往下编写程序了,希望求各路SQL server大神、高手、专家帮我解决这个问题,如果可能我觉得下面的思路还是不清晰,可以加我QQ:584958184

图1
图2
来讲下问题吧,就是计算时间差和传递的问题,目前表里的数据是我手动输入的,但实际上是机器开启后(机器状态为0的时候就是恢复运行状态),数据自动往table4插入的,由于后期数据量很大,有个百度吧友建议我用游标来做,可是我不会用游标......

我来说下效果的思路:
当table4中每次出现的一条错误代码记录时(当location、pointer和ng-itime字段下有数据时,就是一条错误代码),用它们下一条状态记录machine-itime的时间(状态记录的时间也就是machine-status字段为0值的machine-itime字段)减去它自己的ng-itime时间,得出来的时间差值就是这条错误代码的持续时间。并且把这个值传递去table5去,但这个传递有条件,就是以错误类型为条件(table4中的location+pointer字段就是一个类型),例如table4中(图1),出现了3条错误代码,类型分别为sta080 63、zone6 49和System 481,每条错误代码的的下一条状态记录的时间(machine_itime)减去它们各ng_itime,得出来的时间差值要传递到table5对应类型的错误代码中,并把此值插入到time字段中(table5表图是图2)。

还要注意的是,table4的每一条错误代码记录,肯定会有重复出现的,重复出现的错误代码,经过计算出来的时间差值,然后选择table5相对应的错误代码类型,要与旧记录的时间差值进行叠加!!!并不是替换,而是旧记录与新纪录进行相加~!!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • ii950606 踮脚敲代码 3年前

    用存储过程把整个逻辑写出来,然后给table4添加个插入触发器再调用存储过程就行,详细扣扣谈

    点赞 1 评论 复制链接分享
  • qq_25257969 qq_25257969 3年前

    我觉得可以用存储过程,存储过程里面可以进行多个表,变量操作。一个存储过程,就可以搞定。在不行,多些几个自定义函数就可以了。sql server 又 不是oracle 。oracle是很low才会需要用游标。表示非常鄙视游标

    点赞 评论 复制链接分享
  • wangzhengziyu wangzhengziyu 3年前

    可以使用纯SQL实现这个业务逻辑,就是不知道你们这个数据要每隔多长时间采集一次(采集的时间范围),如果table4中连续出现两条不同错误代码记录,
    怎么确定后面恢复时间对应的是哪条ng记录;如果可行的化建议用触发器比较好,只需要两个SQL就搞定

    点赞 评论 复制链接分享
  • feelcycle_07 默默悟问 3年前

    如果你想纯sql语句实现,应该不太可能。如果利用某种语言来实现,应该不是太难。

    无非是按id排序查询null和0状态的数据,null的值对应下一个0状态的数据,得到时间差值,然后基于location+pointer做字典累加,最后输入到table5。

    如果要考虑可以断点计算,需要记录处理的id值,下次从id值记录,这样需要把table5的值取出来做location+pointer的字典,table4的续计算同样
    累加到字典再输出到table5,考虑到数据安全,要考虑加锁读取和存储table5。也可以考虑采用更新方式来保证安全。

    点赞 评论 复制链接分享

相关推荐