SqlServer根据时段统计数据
create table ST_PPTN_R_Real
(
TID int primary key identity(1,1),
STCD varchar(100) not null,
TM datetime not null,
DRP decimal(8,2)
)
go
insert into ST_PPTN_R_Real values('龙谷站点','2013-05-01 00:00:00.000','52.3')
insert into ST_PPTN_R_Real values('龙谷站点','2013-05-01 00:35:00.000','77.3')
insert into ST_PPTN_R_Real values('龙谷站点','2013-05-01 00:44:00.000','46.4')
insert into ST_PPTN_R_Real values('龙谷站点','2013-05-02 15:21:00.000','85.5')
insert into ST_PPTN_R_Real values('龙谷站点','2013-05-03 05:16:00.000','42.3')
insert into ST_PPTN_R_Real values('龙谷站点','2013-05-03 22:31:55.000','160.77')
insert into ST_PPTN_R_Real values('奇峰峰巅','2013-05-01 02:41:00.000','23.3')
insert into ST_PPTN_R_Real values('奇峰峰巅','2013-05-03 14:50:00.000','564.3')
insert into ST_PPTN_R_Real values('奇峰峰巅','2013-05-05 22:33:00.000','77.5')
insert into ST_PPTN_R_Real values('枉顾站地','2013-05-03 02:01:00.000','43.3')
insert into ST_PPTN_R_Real values('枉顾站地','2013-05-03 05:21:00.000','67.3')
insert into ST_PPTN_R_Real values('枉顾站地','2013-05-06 14:42:00.000','56.4')
insert into ST_PPTN_R_Real values('枉顾站地','2013-05-06 15:21:00.000','83.5')
insert into ST_PPTN_R_Real values('柳体站点','2013-05-14 07:00:00.000','34.3')
insert into ST_PPTN_R_Real values('柳体站点','2013-05-15 09:35:00.000','23.3')
insert into ST_PPTN_R_Real values('柳体站点','2013-05-16 11:44:00.000','62.4')
insert into ST_PPTN_R_Real values('柳体站点','2013-05-16 18:44:00.000','73.4')
insert into ST_PPTN_R_Real values('柳体站点','2013-05-17 09:44:00.000','66.4')
go
select * from ST_PPTN_R_Real
go
(一)首先,把条件表准备好:
1.按照每时统计(其中master..spt_values等于master.dbo.spt_values为系统表,number为其中的子段,其实还有更方便的小时统计分组,但这里都套用了一个思路,就直接写下来了)
select CONVERT(varchar(20),dateadd(hour,number,cast('2013-04-01 00:00:00' as datetime)),120) rq,
cast(convert(varchar,dateadd(hour,number,cast('2013-04-01 00:00:00' as datetime)),120) as datetime) begin_time,
cast(convert(varchar,dateadd(hour,number+1,cast('2013-04-01 00:00:00' as datetime)),120) as datetime) end_time
from master..spt_values where type='P'
------这里才是真正的重点:
2.按照每天统计(这里的天与所理解的天不太一样,是根据时段设定的天,例如这里从本日的8点开始到次日的8点结束为一天)
select convert(varchar(10),cast('2013-04-01 00:00:00' as datetime)+number,120) rq,
cast(replace(convert(varchar,dateadd(d,0,cast('2013-04-01 00:00:00' as datetime)+number),120),'00:00:00','08:00:00') as datetime) begin_time,
cast(replace(convert(varchar,dateadd(d,1,cast('2013-04-01 00:00:00' as datetime)+number),120),'00:00:00','08:00:00') as datetime) end_time
from master..spt_values where type='P'
3.按照每月统计(其实还有更方便的月统计分组,但这里都套用了一个思路,就直接写下来了)
select CONVERT(varchar(7),dateadd(MONTH,number,cast('2013-04-01 00:00:00' as datetime)),120) rq,
cast(convert(varchar,dateadd(MONTH,number,cast('2013-04-01 00:00:00' as datetime)),120) as datetime) begin_time,
cast(convert(varchar,dateadd(MONTH,number+1,cast('2013-04-01 00:00:00' as datetime)),120) as datetime) end_time
from master..spt_values where type='P'
(二)开始分组统计
1.按照每时统计
select b.STCD,a.rq,sum(b.DRP) hj from
(
select CONVERT(varchar(20),dateadd(hour,number,cast('2013-04-01 00:00:00' as datetime)),120) rq,
cast(convert(varchar,dateadd(hour,number,cast('2013-04-01 00:00:00' as datetime)),120) as datetime) begin_time,
cast(convert(varchar,dateadd(hour,number+1,cast('2013-04-01 00:00:00' as datetime)),120) as datetime) end_time
from master..spt_values where type='P'
) a
inner join
ST_PPTN_R_Real b
on
b.TM>=a.begin_time and b.TMgroup by STCD,rq order by STCD,rq desc
2.按照每天统计
select STCD,a.rq,sum(b.DRP) hj from
(
select convert(varchar(10),cast('2013-04-01 00:00:00' as datetime)+number,120) rq,
cast(replace(convert(varchar,dateadd(d,0,cast('2013-04-01 00:00:00' as datetime)+number),120),'00:00:00','08:00:00') as datetime) begin_time,
cast(replace(convert(varchar,dateadd(d,1,cast('2013-04-01 00:00:00' as datetime)+number),120),'00:00:00','08:00:00') as datetime) end_time
from master..spt_values where type='P'
) a
inner join
ST_PPTN_R_Real b
on
b.TM>=a.begin_time and b.TMgroup by STCD,rq order by STCD,rq desc
3.按照每月统计
select b.STCD,a.rq,sum(b.DRP) hj from
(
select CONVERT(varchar(7),dateadd(MONTH,number,cast('2013-04-01 00:00:00' as datetime)),120) rq,
cast(convert(varchar,dateadd(MONTH,number,cast('2013-04-01 00:00:00' as datetime)),120) as datetime) begin_time,
cast(convert(varchar,dateadd(MONTH,number+1,cast('2013-04-01 00:00:00' as datetime)),120) as datetime) end_time
from master..spt_values where type='P'
) a
inner join
ST_PPTN_R_Real b
on
b.TM>=a.begin_time and b.TMgroup by STCD,rq order by STCD,rq desc
SqlServer根据时段统计数据的更多相关文章
- Sqlserver 按照时间段统计数据
WITH t1 ( [hour], title ) , ' 0:00:00--- 1:00:00' UNION ALL , ' 1:00:00--- 2:00:00' UNION ALL , ' 2: ...
- SQLServer恢复表级数据
最近几天,公司的技术维护人员频繁让我恢复数据库,因为他们总是少了where条件,导致update.delete出现了无法恢复的后果,加上那些库都是几十G.恢复起来少说也要十几分钟.为此,找了一些资料和 ...
- 转载:SQL按照日、周、月、年统计数据的方法
转载源:http://www.jb51.net/article/42613.htm SQL按照日.周.月.季度.年统计数据的方法 方式一: --按日 select sum(consume),day([ ...
- SQLServer比较两条数据是否相同
SQLServer比较两条数据是否相同 直接比较可能会一个一个字段的比较,也可以将多个字段拼成一个串然后比较,这里有个hash值比较的方法,很好用 用法 将需要的比较的column放进去,逗号隔开,只 ...
- 解剖SQLSERVER 第二篇 对数据页面头进行逆向(译)
解剖SQLSERVER 第二篇 对数据页面头进行逆向(译) http://improve.dk/reverse-engineering-sql-server-page-headers/ 在开发Orc ...
- 恢复SQLSERVER被误删除的数据(转——收藏)
恢复SQLSERVER被误删除的数据 摘自:http://www.cnblogs.com/lyhabc/p/3683147.html 曾经想实现Log Explorer for SQL Server的 ...
- sql不重复的查找统计数据(经典)
例表如下: 表名:MYTEST TID COL1 COL2 COL3 1 1 A A2 1 ...
- (转载)MySQL 统计数据行数 Select Count
(转载)http://www.5idev.com/p-php_mysql_select_count.shtml 统计数据行数 SELECT COUNT() FROM 语法用于从数据表中统计数据行数. ...
- mysql按月,按日分组统计数据
group by DATE_FORMAT(createtime,'%Y-%m');//按月统计数据 group by DATE_FORMAT(createtime,'%Y-%m-%d');//按天统计 ...
随机推荐
- 手动安装 atom 扩展包 packages
由于某些原因, 我们下载 atom 扩展时发现速度特别慢, 或者根本无法下载, 那我们可以尝试手动安装 首先, 从 github 上下载(或其它地方) 扩展包, 解压 进入该文件夹, 找到 packa ...
- android studio 翻译插件
插件下载地址 https://github.com/Skykai521/ECTranslation/releases 使用说明: http://gold.xitu.io/entry/573d8d92a ...
- Centos 6.5 下安装socket5代理
---恢复内容开始--- 1. 安装 先安装依赖库 yum -y install gcc gcc-c++ automake make pam-devel openldap-devel cyrus-sa ...
- Winform 数据库连接app.config文件配置 数据库连接字符串
1.添加配置文件 新建一个winform应用程序,类似webfrom下有个web.config,winform下也有个App.config;不过 App.config不是自动生成的需要手动添加,鼠标右 ...
- JQuery 表格拖动调整列宽效果
类似于桌面程序中的表格拖动表头的效果,当鼠标停留在表头边框线上时,鼠标会变成表示左右拖动的形状,接着拖动鼠标,会在表格中出现一条随鼠标移动的竖线,最后放开鼠标,表格列宽会被调整.最近比较空闲,便自己动 ...
- SQL Server 数据库操作类
/// <summary> /// SQLServerHelper的摘要说明. /// </summary> public class SQLServerHelper { pu ...
- MS SQL的存储过程
-- ============================================= -- Author: -- Create date: 2016-07-01 -- Descriptio ...
- ios 数组排序
第一种:利用数组的sortedArrayUsingComparator调用 NSComparator 示例: obj1和obj2指的是数组中的对象 //1.数组中存放的是字符 NSComparato ...
- 用CSS让未知高度内容垂直方向居中
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...
- cocos2d-x开发: 整合apache http,用于自己检索多项目svn文件
本来我的项目都是放在自己的虚拟机svn仓库中,随着仓库越来越多,有的时候需要去查看项目文件.check out到本地之后,挨个查看也是可以的,可是check out也是需要时间的,就想起了apache ...