求助:关于sql如何统计时间的问题

三、现在我们假设应用计时分为app应用和web应用,需要考虑如下几个方面:

(1)多时间段(2)表中有冗杂数据

(3)用户是在web端和app端都登陆,这种类型的重复时间段只能取其一

 

存在数据:

存在表:应用启动时间统计表Applic_Sessions

字段:applic    platform     start_time     end_time     status     rowid

             X          web           11:30              18:33           1           1

             X          app            11:10              17:50           1           2

             X          app            17:55              19:55           1           3

             X          app            20:31              22:31           1           4

             X          web            02:01              02:40           1           5

 

利用sql语句的方式获取到开始时间和结束时间,timestampdiff( )相减得到。

(1)取出X用户两平台中启动的最小时间

(2)取出X用户两平台中结束的最大时间

按照以上步骤,这样会带来一个问题:如rowid 15的记录,相减所得结果明显大于实际结果。

 

尝试方案1:将不同平台的数据区分开单独计数:

(1)select t.* from Applic_Sessions t where t.platform = “web”;

视图:Web_View

applic     platform      start_time     end_time      status     rowid

    X         web               11:30              18:33           1           1

    X          web               02:01              02:40           1           2

select sum(timestampdiff(second,start_time,end_time)) from Web_View;

 

(2)select t.* from Applic_Sessions t where t.platform = “app”;

视图:App_View

applic      platform     start_time     end_time     status     rowid

    X             app           11:10              17:50            1           1

    X             app           17:55              19:55            1           2

    X             app           20:31              22:31            1           3

select sum(timestampdiff(second,start_time,end_time)) from Web_View;

 

这样求取出单个平台的使用时长,这种适用于:app使用时长可以换取双倍积分 等需求。但是至于中间的重复时间段更加干不掉了,这种方法pass

方案2

视图:Applic_Sessions

applic platform  start_time end_time status rowid

Xweb      11:30 18:33  1  1

Xapp      11:10 17:50  1  2

Xapp      17:55 19:55  1  3

X app       20:31  22:31   1   4

X web       02:01  02:40   1   5

 

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

                                                    11:30............................................18:33(web)

                                    11:10....................17:50(app)

                                                                                        17:55.................19:55(app)

            02:01....02:40                                                                                                    20:31.......22:31

 

整理一下数据,发现其中的难点就是:web的使用时长段与app的使用时间段夹杂在一起,其他正常数据横向合并就成,那第一步就是把这些夹杂数据单独拎出来,然后取出最小启动值和最大结束值,相减就好拉:

写下这个sql,越看越别扭,能行么---显然不行

select t.* from Applic_Sessions t where

        t.start_time between (select min(t.start_time) from Applic_Sessions t)     

        and (select max(t.end_time) from Applic_Sessions t)

                and t.end_time between t.start_time and t.end_time;

至此,卡住了。。。

 

绞尽了脑汁,搞不定啊,有哪位大神可以帮帮忙啊,谢谢了

 

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论

打赏作者

liang2606

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值