有id状态时间三个维度的sql表。对于时间进行条件计算,求解答

微信图片_20220223173241.png有 id   状态(状态有ABC三个情况)   时间三个维度的sql表。 (审批表)

1、现在要算不同的状态计算时间差。比如状态为C的时间-状态为A的时间 =完成时间。

状态为B的时间-状态为A的时间 =等待时间....

2、同一个id,状态会有重复,比如有两个A,三个B。现在要算的是C状态-最后一个B状态后的第一A状态对应的时间=复审时间。

yzm221338 发布于 2022-2-23 14:26 (编辑于 2022-2-23 17:33)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
13527520416Lv4中级互助
发布于2022-2-23 15:58(编辑于 2022-2-23 15:58)

先第一个select  max(时间) group by id  ,然后第二个select 再用时间差函数相减

  • yzm221338 yzm221338(提问者) 第一个select可以实现,第二个select有点没搞懂啊,用group by了,还是要用状态去过过滤。
    2022-02-23 16:39 
  • 13527520416 13527520416 回复 yzm221338(提问者) 第一个实现了,第二个select就是吧第一个select数据拿来进行加减
    2022-02-23 16:49 
  • 13527520416 13527520416 回复 yzm221338(提问者) select t.id,TIMESTAMPDIFF(a_time,b_time) from (select id ,max(a) as a_time, max(b) as b_time, max(b) as c_time group by id )t 思路就是这样 你可以试一下
    2022-02-23 16:52 
  • yzm221338 yzm221338(提问者) 回复 13527520416 时间只有一个字段呀,可能我没表述清楚,上了一张图,大佬帮忙看下
    2022-02-23 17:33 
最佳回答
0
yzm119464Lv3初级互助
发布于2022-2-23 18:20

一张表多次利用,先把状态分出来,如

select max(t1.id),min(t2.日期)-max(t1.日期) as 完成时间 from TABLE t1 left join  TABLE t2  on t1.id=t2.id where t1.状态="已完成" and t2.状态="待审批" 

一次类推可以计算其他时间

  • 3关注人数
  • 438浏览人数
  • 最后回答于:2022-2-23 18:20
    请选择关闭问题的原因
    确定 取消
    返回顶部