今天拿到一个查询需求,需要统计某一天各个时间段内的记录数量。

具体是统计某天9:00至22:00时间段,每半小时内订单的数量,最后形成的数据形式如下:
时间段          订单数
9:00~9:30 xx个
9:30~10:00 xx个
...
 
如果说是按每个小时来统计订单数量,这个是比较简单的,只要将订单表中的OrderTime字段中的小时取出,然后根据每个小时的值进行group by就可以了。
select T.timehour,count(T.orderid) as number from
(
select o.orderid,datename(hh,o.ordertime) as timehour from orders as o 
where o.ordertime<'2013-10-20 22:00' and o.ordertime>'2013-10-20 9:00'
) as T
group by T.timehour
order by timehour asc
 
但是如果要实现上面的那种查询就有点麻烦了。我想到的一种实现方案是:取出每个订单的时间字段中的“小时和分钟”,将这个时间转换为距凌晨的分钟数。如:9:00转换后就是540,9:30转换后就是570。
计算的过程是:
1、取定一个基线值:base=540(9:00)
2、每条条订单记录的分钟数设为:timehour
   分组编号:groupid=(timehour-base)/30
 
这样可以将各个时间段内的时间统一到一个分组编号中去。如下:
时间值 groupid     
9:02     0
9:23 0
9:30 1
9:31 1
10:01 3
..
 
这样一来,就把各个时间段内的时间转换成对应的某一个分组编号了,这样我们就可以对每个groupid进行分统计每个组内的订单数了。
时间段          groupid
9:00~9:30 0
9:30~10:00 1
10:00~10:30 2
..
 
下面是完整的sql语句:
select T.groupid,count(T.orderid) as number from
(
select o.orderid,o.ordertime,((datename(hh,o.ordertime)*60+datename(mi,o.ordertime))-540)/30 as groupid from orders as o 
where o.ordertime<'2013-10-20 22:00' and o.ordertime>'2013-10-20 9:00'
) as T
group by T.groupid
order by groupid
 

sql查询技巧,按时间分段进行分组,每半小时一组统计组内记录数量的更多相关文章

  1. sql查询平均下单时间

    SQL查询订单平均审核时长 今天在写一个sql,需求是算一个订单在执行状态中的各个节点的时长 比如在订单中,状态0为开始接单,状态3为已经审核,那么现在需要计算每个客服的平均审核时长 像图中所示:这个 ...

  2. 计算 sql查询语句所花时间

    --1:下面这种是SQL Server中比较简单的查询SQL语句执行时间方法,通过查询前的时间和查询后的时间差来计算的: declare @begin_date datetimedeclare @en ...

  3. 各种SQL查询技巧汇总 (转)

    原文地址: https://blog.csdn.net/tim_phper/article/details/54963828 select select * from student; all 查询所 ...

  4. [SQL]查询某一个字段在某一段时期数据库中使用到的记录

    有些时候我们常常须要哪里用到了一些表,又或者什么时候运行了某一个存储过程.整理出了在某段时期内数据库运行的sql查询.也能够查询到数据库中某些字段的存放处.非常好非常强大.希望能帮到大家~ SELEC ...

  5. SQL 查询 技巧

    一.使用SELECT检索数据 数据查询是SQL语言的中心内容,SELECT 语句的作用是让数据库服务器根据客户要求检索出所需要的信息资料,并按照规定的格式进行整理,返回给客户端. SELECT 语句的 ...

  6. sql查询技巧指南

    传送门(牛客网我做过的每到题目答案以及解析) sql定义: 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用 ...

  7. 50条SQL查询技巧、查询语句示例

    学习了 1.查询“001”课程比“002”课程成绩高的所有学生的学号: 2.查询平均成绩大于60分的同学的学号和平均成绩: 3.查询所有同学的学号.姓名.选课数.总成绩: 4.查询姓“李”的老师的个数 ...

  8. ysql常用sql语句(12)- group by 分组查询

    测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 ...

  9. SQL高级查询技巧

    SQL高级查询技巧   1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重 ...

随机推荐

  1. Linux Shell 小脚本经典收藏

    原文:http://www.cnblogs.com/Javame/p/3867686.html 1.在两个文件中找出相同的号码 diff -y xx.txt oo.txt | egrep -v &qu ...

  2. NetBox v2.8下载使用指南

    2008-09-20 11:21:05|  分类: ASP|举报|字号 订阅     NetBox v2.8下载地址: http://down.chinaz.com/soft/13211.htm 安装 ...

  3. 日期和时间特效-查看"今天是否为节假日"

    ———————————————— <script type="text/javascript">                    function start() ...

  4. H5的新应用-指定视频的播放进度

    <!DOCTYPE html> <html> <head> <title>指定视频的播放进度</title> <meta http-e ...

  5. hadoop三个配置文件的参数含义说明core-site.xml,hdfs-site.xml,mapred-site.xml

    配置hadoop,主要是配置core-site.xml,hdfs-site.xml,mapred-site.xml三个配置文件,默认下来,这些配置文件都是空的,所以很难知道这些配置文件有哪些配置可以生 ...

  6. LeetCode OJ 142. Linked List Cycle II

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Note ...

  7. docker 基础命令二

    开启/停止/重启 查看当前正在运行容器docker ps 查看包括已经停止的所有容器docker ps -a 显示最新启动的一个容器docker ps -l 新建一个容器运行docker run 启动 ...

  8. c#抓取网页内容乱码的解决方案

    写过爬虫的同学都知道,这是个很常见的问题了,一般处理思路是: 使用HttpWebRequest发送请求,HttpWebResponse来接收,判断HttpWebResponse中”Content-Ty ...

  9. WebRequest 对象的使用

    // 待请求的地址 string url = "http://www.cnblogs.com"; // 创建 WebRequest 对象,WebRequest 是抽象类,定义了请求 ...

  10. URL设置问题

    URL设置那里删除了<item path="index.aspx" pattern="index.aspx"/>后,访问首页就不出来了,要加上/in ...