问题:将Table1中的数据按照时间段以及其他可能的主键进行统计,然后转存到另一个表Table2中。

说明:时间段分类有两种,一是标准的按照分钟、小时、天等进行分段统计,二是用户自定义时间段,比如上午8点到11点,下午1点到5点。

原理:对时间粒度进行分类,相同的时间段内的时间取一个相同的标示,然后对其分组查询。

方法:对于第一类时间段,可以采用取分钟数,小时数,天数作为标示。
       对于SQL Server,采用datediff(hour,'2007-5-17',Time)函数,可以使用minute,day等不同粒度。例如15分钟可以这样处理datediff(minute,'2007-5-17',myTime)/15,不要忘了反过来恢复时间时应该将该值再乘以15然后与标准时间'2007-5-17'相加 dateadd(minute,stime*15,'2007-5-17')
       对于Oracle,采用时间相减,得到一个小数,单位是天,乘以相关值再取整得到天数、小时数、分钟等,如
trunc((mytime-TO_DATE('2007-5-17 0:00:00','yyyy-mm-dd hh24:mi:ss'))*96)得到的是15分钟的分组标示。
       对于第二类时间段,另建一个表,存储开始时间、结束时间、标示,然后利用该表联合查询。

注意:对于转存表中已经有相关数据可能造成失败的情况进行判别,防止出错。这样执行第二次,就不会再插入相同的数据了。

示例:

第一类解决方法:

 1

 

 1

 

第二类解决方法

不具体写了,因为要比上面的简单,这里就非常简单的表示一下查询原理,SQL Server

 

 1数据库时间段分组查询解决方法和数据转储方法CREATE TABLE [dbo].[Table3] (
 2数据库时间段分组查询解决方法和数据转储方法[starttime] [datetime] NULL ,
 3数据库时间段分组查询解决方法和数据转储方法[endtime] [datetime] NULL ,
 4数据库时间段分组查询解决方法和数据转储方法[id] [int] NULL    --看你怎么用了,没有这个也可以
 5数据库时间段分组查询解决方法和数据转储方法)
 6数据库时间段分组查询解决方法和数据转储方法GO
 7数据库时间段分组查询解决方法和数据转储方法
 8数据库时间段分组查询解决方法和数据转储方法delete from Table3;
 9数据库时间段分组查询解决方法和数据转储方法
10数据库时间段分组查询解决方法和数据转储方法insert into Table3 values('2007-5-17 0:0:0','2007-5-17 2:0:0',1);
11数据库时间段分组查询解决方法和数据转储方法insert into Table3 values('2007-5-17 3:0:0','2007-5-17 5:0:0',2);
12数据库时间段分组查询解决方法和数据转储方法GO
13数据库时间段分组查询解决方法和数据转储方法
14数据库时间段分组查询解决方法和数据转储方法select id,ac,bi,sum(ci) cisum 
15数据库时间段分组查询解决方法和数据转储方法           from Table1,Table3 where ( myTime>=starttime and myTime<endTime)
16数据库时间段分组查询解决方法和数据转储方法          group by id,ac,bi order by id
17数据库时间段分组查询解决方法和数据转储方法

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-31
  • 2021-11-30
  • 2022-03-01
  • 2021-11-18
  • 2022-12-23
  • 2021-11-28
猜你喜欢
  • 2021-12-18
  • 2021-11-28
  • 2021-07-05
  • 2021-11-28
  • 2021-11-28
  • 2021-10-30
相关资源
相似解决方案