MS SQL数据库关于时间循环如何处理跨天问题 100
有如下表:--------------------------------------------------------------------------------...
有如下表:
-----------------------------------------------------------------------------------------------------------------
设备 开始时间 结束时间 总时间(分钟)
A 2015-08-01 17:06:49 2015-08-02 03:41:32 635
B 2015-08-01 20:54:42 2015-08-03 23:59:59 3605
----------------------------------------------------------------------------------------------------------------
需求:
1、将每个设备的时间段循环得出每天总时间
2、1天的时间计算结果必须是1440
3、不能用游标方式处理
需求结果集表如下:
-----------------------------------------------------------------------------------------------------------------
设备 开始时间 结束时间 总时间(分钟)
A 2015-08-01 17:06:49 2015-08-01 23:59:59 413
A 2015-08-02 00:00:00 2015-08-02 03:41:32 222
B 2015-08-01 20:54:42 2015-08-01 23:59:59 185
B 2015-08-02 00:00:00 2015-08-02 23:59:59 1440
B 2015-08-03 00:00:00 2015-08-03 23:59:59 1440
----------------------------------------------------------------------------------------------------------------------
请各位大虾告之,希望提供直接得出结果集的脚本供参考。 展开
-----------------------------------------------------------------------------------------------------------------
设备 开始时间 结束时间 总时间(分钟)
A 2015-08-01 17:06:49 2015-08-02 03:41:32 635
B 2015-08-01 20:54:42 2015-08-03 23:59:59 3605
----------------------------------------------------------------------------------------------------------------
需求:
1、将每个设备的时间段循环得出每天总时间
2、1天的时间计算结果必须是1440
3、不能用游标方式处理
需求结果集表如下:
-----------------------------------------------------------------------------------------------------------------
设备 开始时间 结束时间 总时间(分钟)
A 2015-08-01 17:06:49 2015-08-01 23:59:59 413
A 2015-08-02 00:00:00 2015-08-02 03:41:32 222
B 2015-08-01 20:54:42 2015-08-01 23:59:59 185
B 2015-08-02 00:00:00 2015-08-02 23:59:59 1440
B 2015-08-03 00:00:00 2015-08-03 23:59:59 1440
----------------------------------------------------------------------------------------------------------------------
请各位大虾告之,希望提供直接得出结果集的脚本供参考。 展开
2个回答
展开全部
--sql2005+,CTE表达式,不过看上去比while复杂
--建表
create table T
(
设备 varchar(10),
开始时间 datetime,
结束时间 datetime
)
--插入数控
insert into t values('A','2015-08-01 17:06:49', '2015-08-02 03:41:32')
insert into t values('B','2015-08-01 20:54:42', '2015-08-03 23:59:59')
With CT
As
(
Select 设备,开始时间,结束时间
From T
Union all
Select 设备,DATEADD(DAY,1,开始肆埋扮时间),结束时间 From ct
Where 液燃DATEADD(DAY,1,开始时间)<DATEADD(DAY,1,结束时间)
)
Select 设备,开始时间,结束时间,DATEDIFF(MI,开始时间,结束时间)+
Case When id>1 Then 1 Else 0 End As 分钟
From
(
Select id,设备,
Case When id>1 Then Convert(Datetime,Convert(Varchar(8),开始时间,112))
Else 开始时间 End As 开始时间,
Case When id=cnt Then 结束时间
Else Convert(Datetime,Convert(Varchar(8),开始时间,112)+' 23:59:59') End As 结束时间
From
(
Select *,ROW_NUMBER() 裂灶Over(Partition By 设备 Order by 开始时间) As id,
COUNT(*) Over(PARTITION by 设备) As cnt
From CT
Where Convert(Varchar(8),开始时间,112)<=Convert(Varchar(8),结束时间,112)
) N
) M
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询