1

我想从包含日期、小时和数据的表中计算数据..表中有很多数据..小时是数据库中的 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, hour:1 和其余数据 .. 表示数据结果的输出如下:

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

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

sdata1 和 sdata2 是数据的总和,是否有任何其他方法可以总结从今天 hour:2 到第二天 hour:2 的条件下的这些数据?非常感谢大家..谢谢..

这些数据是由批量插入PLC数据产生的......

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

从表中选择 SUM(CONVERT(int,data1)) AS sdata1,SUM(CONVERT(int,data2)) AS sdata2 where (CONVERT(datetime, date, 105) >= CONVERT(datetime,date,105) 和 CONVERT(int ,hour) >= 2) and (CONVERT(datetime, date, 105) <= DATEADD(day, 1,CONVERT(datetime,date,105)) and CONVERT(int,hour) < 2) and month(CONVERT(datetime ,Date,103))= '01' 和年份(CONVERT(datetime,Date,103))= '2010'

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

4

2 回答 2

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)
于 2012-07-25T08:42:03.383 回答
0

愿望的结果应该是这样的

日期 sdata1 sdata2

2010 年 1 月 1 日54315 6960
2010 年 2 月 1日 54337 14144 2010 年 3 月 1
日 21736 13840
......等

但是从您的查询中,它运行良好...谢谢,最终结果如下:

日期 sdata1 sdata2

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

这意味着查询总结了从 01/01/2010 到 02/01/2010 的数据并输出 02/01/2010..hehe ..

于 2012-07-25T09:23:12.417 回答