将今天特定数据的数据汇总到第二天的数据和其余数据

时间:2012-07-25 08:26:38

标签: sql sql-server

我想从表中计算数据,其中包含日期,小时和数据..表中有很多数据..小时是数据库中的int数据类型,其他(DATE.etc)是数据类型varchar ..示例如下:

DATE       hour  data1  data2
-------------------------------
01/01/2010  1    10860  1234    
01/01/2010  2    10861  1234    
01/01/2010  3    10862  1234    
01/01/2010  4    10863  567   
01/01/2010  5    10864  458    
02/01/2010  1    10865  3467    
02/01/2010  2    10866  7890    
02/01/2010  3    10867  863    
02/01/2010  4    10868  0    
02/01/2010  5    10868  698  
03/01/2010  1    10868  4693  
03/01/2010  2    10868  7853  
03/01/2010  3    10868  5987
....................etc

并从上面的数据。我想总结数据从日期:01/01/2010,小时:2到第二天日期:02/01/2010,小时:1当然日期:02/01/2010,小时:2到目前为止:03/01/2010,小时:1和其余数据..意味着数据结果的输出如下:

DATE           sdata1  sdata2
-------------------------------
01/01/2010     54315   6960    
02/01/2010     54337   14144    
03/01/2010     21736   13840
...................etc

date,data1和data2的数据类型是varchar,EXCEPT时间是数据类型int ...

sdata1和sdata2是数据的总和,还有其他任何方式可以将这些数据从今天的小时:2到第二天小时:2?非常感谢大家..谢谢你......

这些数据来自PLC数据的批量插入......

这是我自己的解决方案,但它永远不会成功!!

从表中选择SUM(CONVERT(int,data1))AS sdata1,SUM(CONVERT(int,data2))AS sdata2 (CONVERT(datetime,date,105)> = CONVERT(datetime,date,105)和CONVERT(int,hour)> = 2)和 (CONVERT(datetime,date,105)< = DATEADD(day,1,CONVERT(datetime,date,105))和CONVERT(int,hour)< 2) 和 月(CONVERT(日期时间,日期,103))='01'和年份(CONVERT(日期时间,日期,103))='2010'

有人帮我解决这个问题......我的大脑爆裂...... @@

2 个答案:

答案 0 :(得分:1)

你去吧

set dateformat dmy
declare @t table(DATE  date,     hour int,  data1  int, data2 int)
insert into @t
select '01/01/2010',  1,    10860,  1234     union all
select '01/01/2010',  2,    10861,  1234     union all
select '01/01/2010',  3,    10862,  1234     union all
select '01/01/2010',  4,    10863,  567    union all
select '01/01/2010',  5,    10864,  458     union all
select '02/01/2010',  1,    10865,  3467     union all
select '02/01/2010',  2,    10866,  7890     union all
select '02/01/2010',  3,    10867,  863     union all
select '02/01/2010',  4,    10868,  0     union all
select '02/01/2010',  5,    10868,  698   union all
select '03/01/2010',  1,    10868,  4693   union all
select '03/01/2010',  2,    10868,  7853   union all
select '03/01/2010',  3,    10868,  5987 

select dateadd(day,case when hour>1 then 1 else 0 end,date),
sum(data1),sum(data2) 
from @t
group by dateadd(day,case when hour>1 then 1 else 0 end,date)

答案 1 :(得分:0)

欲望结果应该是这样的

DATE sdata1 sdata2

01/01/2010 54315 6960
02/01/2010 54337 14144
03/01/2010 21736 13840
...................等

但是从你的查询。它运作良好...谢谢你,最后的结果如下:

DATE sdata1 sdata2

02/01/2010 54315 6960
03/01/2010 54337 14144
04/01/2010 21736 13840
...................等

意味着查询总结了从2010年1月1日到2010年1月2日的数据,并输出了02/01 / 2010..hehe ..