当前位置: 代码迷 >> Sql Server >> 请问关于日期时间的SQL语句的写法
  详细解决方案

请问关于日期时间的SQL语句的写法

热度:26   发布时间:2016-04-24 10:02:19.0
请教关于日期时间的SQL语句的写法

create table test3
(
  name varchar(50),
  sl int,
  rq1 datetime,
  rq2 datetime
)
insert into test3 select 'a',100,'2014-08-01 13:00','2014-08-01 13:10'
insert into test3 select 'a',200,'2014-08-01 13:10','2014-08-01 13:20'

insert into test3 select 'a',300,'2014-08-01 14:00','2014-08-01 14:10'
insert into test3 select 'a',400,'2014-08-01 14:10','2014-08-01 14:20'
/*
要得到这样结果集
name     sl总和                  时间段
a          300       2014-08-01 13:10--2014-08-01 13:20  
a          700       2014-08-01 14:10--2014-08-01 14:20  

*/
drop table test3
------解决方案--------------------
按小时分组?
还是首位相连?
------解决方案--------------------
请问结果集中[时间段]的计算逻辑是什么?
------解决方案--------------------
SELECT t.NAME,t.sl 'sl总和',rq1 + '--' + rq2 '时间段' FROM 
(
SELECT  [name],SUM(sl) 'sl', CONVERT(VARCHAR(19),MAX(rq1),20) 'rq1'  , CONVERT(VARCHAR(19),MAX(rq2),20) 'rq2' 
 FROM test GROUP BY [name],CONVERT(VARCHAR(13),rq1,20),CONVERT(VARCHAR(13),rq2,20)
) t


结果:

------解决方案--------------------
你的时间段不应该是‘2014-08-01 13:00’-‘2014-08-01 13:20’吗怎么是‘2014-08-01 13:10’-‘2014-08-01 13:20’这个呀
------解决方案--------------------
引用:
SELECT t.NAME,t.sl 'sl总和',rq1 + '--' + rq2 '时间段' FROM 
(
SELECT  [name],SUM(sl) 'sl', CONVERT(VARCHAR(19),MAX(rq1),20) 'rq1'  , CONVERT(VARCHAR(19),MAX(rq2),20) 'rq2' 
 FROM test GROUP BY [name],CONVERT(VARCHAR(13),rq1,20),CONVERT(VARCHAR(13),rq2,20)
) t


结果:


这个应该能满足你的要求了,如果是楼上说的,就把 MAX改成Min
------解决方案--------------------
SELECT 
name,
SUM(sl)AS sq总和,
convert(varchar(20),max(rq1),20)+'-'+convert(varchar(20),MAX(rq2),20)时间差 FROM #T3
GROUP BY DATEPART(hour,rq1),name
  相关解决方案