细化解析:实例创建按小时来报告的查询

来源:岁月联盟 编辑:zhuzhu 时间:2007-08-15

要创建一个可以每个小时报告之查询,首先要创建一个表格。该表格一列记录日期,而没有时间信息;另一列记录钟点。下面之表格有一列记录了不同之处理类型。

例如,我们可以按小时找出处理类型之总数。

 

CREATE TABLE test(StartTime DATETIME NOT NULLDEFAULT CURRENT_TIMESTAMP,StartDate DATETIME NOT NULLDEFAULT CONVERT(DATETIME, CONVERT(CHAR(10),CURRENT_TIMESTAMP, 110)),StartHour INT NOT NULLDEFAULT DATEPART(hh,CURRENT_TIMESTAMP),TranType INT NOT NULLCONSTRAINT ck_TranType CHECK ( TranType IN( 1, -- insert2, -- update3, -- delete)DEFAULT 1)GO

 

 

接下来,插入test之数据来模拟一个可能之样本。

 

INSERT test (StartTime, TranType) VALUES (CURRENT_TIMESTAMP, 3)INSERT test (StartTime, TranType) VALUES (CURRENT_TIMESTAMP, 2) INSERT test (StartTime, TranType) VALUES (CURRENT_TIMESTAMP, 3)GODECLARE @hr intSET @hr = DATEPART(hh, DATEADD(hh,-1,CURRENT_TIMESTAMP) )INSERT test (StartTime, TranType, StartHour) _VALUES (DATEADD(hh,-1,CURRENT_TIMESTAMP), 3, @hr)INSERT test (StartTime, TranType, StartHour) _  VALUES (DATEADD(hh,-1,CURRENT_TIMESTAMP), 1, @hr)INSERT test (StartTime, TranType, StartHour) _  VALUES (DATEADD(hh,-1,CURRENT_TIMESTAMP), 2, @hr)GO

然后用一个查询来找出按日和小时之处理总数。

 

SELECT StartDate tran_day,StartHour tran_hour, CASE trantype WHEN 1 THEN 'insert'WHEN 2 THEN 'update'WHEN 3 THEN 'delete'ELSE 'unknown'END trantype,COUNT(*) tran_total FROMTestGROUP BYStartDate,StartHour,trantypeORDER BY StartDate, StartHourCOMPUTE SUM(COUNT(*)) BY StartDate, StartHourGO

去掉test可以清空test表格。

 

DROP TABLE testGO