请问如何在多天数的日期内,统计每天的聚合数据?
不好说明,看下面就知道了,呵呵
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
*/