2011-10-11 57 views
0

我有这样的表结构:集团通过时间跨度在SQL Server 2008

ID BIGINT IDENTITY(1,1) 
deviceID BIGINT NOT NULL, 
entryTime DATETIME2 NOT NULL, 
value FLOAT, 
PRIMARY KEY (ID), 
UNIQUE KEY (deviceID, entryTime) 

我在这个表约15万行,我想,以填补另一张表从该表汇总数据。我想将这些数据按deviceID分组为一天中的“桶”,并取当天值的最小值,最大值和平均值。任何想法我怎么做?

回答

6

喜欢的东西:

SELECT CONVERT(DATE,entryTime) [Date], 
     deviceId, 
     MIN(Value) MinValue, 
     MAX(Value) MaxValue, 
     AVG(Value) AvgValue 
FROM YourTable 
GROUP BY CONVERT(DATE,entryTime), 
     deviceId 
1

你可以使用转换(DATE,entryTime)作为by子句选择和组,但是如果你想按你会使用更具体的,或更少的特定时间段例如:

INSERT INTO NEW_TABLE (deviceID, entryTime, min, max, avg) 
SELECT deviceID, 
     DATEPART(yy, entryTime)+DATEPART(mm, entryTime)+DATEPART(dd, entryTime), 
     MAX(value), 
     MIN(value), 
     AVG(value) 
FROM OLD_TABLE 
     GROUP BY 
     deviceId, 
     DATEPART(yy, entryTime)+DATEPART(mm, entryTime)+DATEPART(dd, entryTime)