求助:关于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 为1和5的记录,相减所得结果明显大于实际结果。
尝试方案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;
至此,卡住了。。。
绞尽了脑汁,搞不定啊,有哪位大神可以帮帮忙啊,谢谢了
求助:关于sql如何统计时间的问题的更多相关文章
- 全废话SQL Server统计信息(2)——统计信息基础
接上文:http://blog.csdn.net/dba_huangzj/article/details/52835958 我想在大地上画满窗子,让所有习惯黑暗的眼睛都习惯光明--顾城<我是一个 ...
- SQL Server统计信息:问题和解决方式
在网上看到一篇介绍使用统计信息出现的问题已经解决方式,感觉写的很全面. 在自己看的过程中顺便做了翻译. 因为本人英文水平有限,可能中间有一些错误. 假设有哪里有问题欢迎大家批评指正.建议英文好的直接看 ...
- 梁敬彬老师的《收获,不止SQL优化》,关于如何缩短SQL调优时间,给出了三个步骤,
梁敬彬老师的<收获,不止SQL优化>,关于如何缩短SQL调优时间,给出了三个步骤, 1. 先获取有助调优的数据库整体信息 2. 快速获取SQL运行台前信息 3. 快速获取SQL关联幕后信息 ...
- SQL 时间范围和时间粒度
前言 使用 SQL 进行业务数据计算时,经常会遇到两个概念:时间范围 和 时间粒度 .以 最近一天的每小时的用户访问人数 为例: 最近一天 是时间范围 每小时 是时间粒度 常见的时间范围:最近五分钟. ...
- sql server日期时间转字符串
一.sql server日期时间函数Sql Server中的日期与时间函数 1. 当前系统日期.时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基 ...
- SQL Server日期时间格式转换字符串详解 (详询请加qq:2085920154)
在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...
- SQL Server日期时间格式转换字符串
在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...
- SQL语句统计每天、每月、每年的 数据
SQL语句统计每天.每月.每年的数据 1.每年select year(ordertime) 年,sum(Total) 销售合计from 订单表group by year(ordertime) 2.每月 ...
- sql server日期时间转字符串(转)
一.sql server日期时间函数Sql Server中的日期与时间函数 1. 当前系统日期.时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基 ...
随机推荐
- NIO基础篇(二)
Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管理多个网络连接. 传统的 ...
- 记一次酷狗音乐API的获取,感兴趣的可以自己封装开发自己的音乐播放器
1.本教程仅供个人学习用,禁止用于任何的商业和非法用途,如涉及版权问题请联系笔者删除. 2.随笔系作者原创文档,转载请注明文档来源:http://www.cnblogs.com/apresunday/ ...
- Ansible进阶--playbook的使用
一.什么是playbooksplaybooks是ansible的脚本.如同shell脚本一样,它是控制远程主机的一系列命令的集合,通过YAML语言编写.执行一些简单的任务,我们可以使用ad-hoc命令 ...
- 关于DOM与BOM的总结
1.什么是BOM,什么是DOM(基本概念) BOM: Browers Object MOdel 浏览器对象模型 DOM: Document Object MOdel ...
- Android Native App自动化测试实战讲解(上)(基于python)
1.Native App自动化测试及Appuim框架介绍 android平台提供了一个基于java语言的测试框架uiautomator,它一个测试的Java库,包含了创建UI测试的各种API和执行自动 ...
- 正本清源区块链——Caoz
正本清源区块链 说明:以下内容整理自Caoz的<正本清源区块链>,如有不妥,请联系我修改或删除. 简介 不讨论炒币!不讨论炒币!不讨论炒币! 本课程内容分为两部分: 第一部分,烧脑篇,介绍 ...
- 获取目录-Winform
// 获取程序的基目录. System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径. System.Diagnostics.Process.G ...
- php提供的sapi有哪些?CGI、FastCGI、php-fpm、php-cgi解释
一.前言 一直对PHP的sapi是什么东西好奇,在网上一查都是各种说fpm cgi fastcgi php-cgi 直到看了鸟哥的这篇文章介绍戳这里,看到源码下的sapi目录才有所了解. 二.sapi ...
- ASP.NET Core 使用 URL Rewrite 中间件实现 HTTP 重定向到 HTTPS
在传统 ASP.NET 程序中,我们可以通过配置 IIS 的“URL 重写”功能实现将 HTTP 请求重定向为 HTTPS .但是该方法在 ASP.NET Core 应用中不再工作.在 ASP.NET ...
- python 垃圾回收机制的思考
一.前言 Python 是一门高级语言,使用起来类似于自然语言,开发的时候自然十分方便快捷,原因是Python在背后为我们默默做了很多事情,其中一件就是垃圾回收,来解决内存管理,内存泄漏的问题. 内存 ...