首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请教怎么在多天数的日期内,统计每天的聚合数据

2012-01-28 
请问如何在多天数的日期内,统计每天的聚合数据?不好说明,看下面就知道了,呵呵sqlor存储过程表如下:机器号

请问如何在多天数的日期内,统计每天的聚合数据?
不好说明,看下面就知道了,呵呵
sql     or存储过程
表如下:

                          机器号                             点火类型(0为点火,1为熄火)     时间
id   (varchar)   MATHINENO(varchar)       MSGTYPE(int)                                 WORKTIME(datetime)

001                       001                                       0                                                     2007-3-21   AM   7:41:39
002                       001                                       1                                                     2007-3-21   AM   9:41:39  
003                       001                                         0                                                   2007-3-21   AM   11:41:39
004                       001                                       1                                                       2007-3-21   AM   12:41:39
005                       001                                       0                                                         2007-3-21   pM   15:41:39
006                       001                                       1                                                           2007-3-21   PM   20:41:39
007                     001                                       0                                                     2007-3-22   AM   8:41:39


008                     001                                       1                                                     2007-3-22   AM   9:41:39  
009                       001                                         0                                                   2007-3-22   AM   11:41:39
010                   001                                       1                                                       2007-3-22   AM   12:41:39
011                     001                                       0                                                         2007-3-22   pM   15:41:39
012                       001                                       1                                                           2007-3-22   PM   19:41:39  


求一条sql语句:
要求如下:
还   要以每天的零晨4点   最近的一次点火为点火时间和第二天的零晨4点   最近的一次熄火时间为熄火时间
根据MATHINENO   来查询   (以月为单位显示)     每天的最早的一次点火时间(如果早上8点后点火)显示不正常,每天的最后一次熄火时间(如果晚上8点钟以前)显示不正常

datagrid   显示如下:
    MATHINENO           第一次点火时间                         最后一次熄火时间                                                     日期

    001                         2007-3-21   AM   7:41:39   (正常)         2007-3-21   PM   20:41:39(正常)             2007-3-21
    001                           2007-3-22   AM   8:41:39(不正常)         2007-3-22   PM   19:41:39   (不正常)     2007-3-22

[解决办法]
--SET Language English
--SET Language 繁體中文
--SET Language 简体中文

Create Table TEST
(idvarchar(10),
MATHINENOvarchar(10),
MSGTYPEint,
WORKTIMEdatetime)


Insert TEST Select '001 ', '001 ', 0, '2007-3-21 7:41:39 '
Union All Select '002 ', '001 ', 1, '2007-3-21 9:41:39 '
Union All Select '003 ', '001 ', 0, '2007-3-21 11:41:39 '
Union All Select '004 ', '001 ', 1, '2007-3-21 12:41:39 '
Union All Select '005 ', '001 ', 0, '2007-3-21 15:41:39 '
Union All Select '006 ', '001 ', 1, '2007-3-21 20:41:39 '
Union All Select '007 ', '001 ', 0, '2007-3-22 8:41:39 '
Union All Select '008 ', '001 ', 1, '2007-3-22 9:41:39 '
Union All Select '009 ', '001 ', 0, '2007-3-22 11:41:39 '
Union All Select '010 ', '001 ', 1, '2007-3-22 12:41:39 '
Union All Select '011 ', '001 ', 0, '2007-3-22 15:41:39 '
Union All Select '012 ', '001 ', 1, '2007-3-22 19:41:39 '
GO
--Select * From TEST
Select
MATHINENO,
Convert(Varchar, 第一次点火时间, 120) + (Case When DatePart(Hour, 第一次点火时间) < 8 Then N '(正常) ' Else N '(不正常) ' End) As 第一次点火时间,
Convert(Varchar, 最后一次熄火时间, 120) + (Case When DatePart(Hour, 最后一次熄火时间) > = 20 Then N '(正常) ' Else N '(不正常) ' End) As 最后一次熄火时间,
WORKTIME
From
(
Select
MATHINENO,
Min(Case MSGTYPE When 0 Then WORKTIME Else Null End) As 第一次点火时间,
Max(Case MSGTYPE When 1 Then WORKTIME Else Null End) As 最后一次熄火时间,
Convert(Varchar(10), WORKTIME, 120) As WORKTIME
From
TEST
Group By
MATHINENO,
Convert(Varchar(10), WORKTIME, 120)
) A
GO
Drop Table TEST
GO
/*
MATHINENO第一次点火时间最后一次熄火时间WORKTIME
0012007-03-21 07:41:39(正常)2007-03-21 20:41:39(正常)2007-03-21
0012007-03-22 08:41:39(不正常)2007-03-22 19:41:39(不正常)2007-03-22
*/

热点排行