在SQL Server 2008中按时间跨度分组

时间:2011-10-11 13:36:44

标签: sql 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)

我在这个表中有大约1500万行,我想用这个表中的聚合数据填充另一个表。我希望将deviceID的数据分组到一天大小的“桶”中,并获取当天值的最小值,最大值和平均值。知道我是怎么做的吗?

2 个答案:

答案 0 :(得分: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 :(得分:1)

您可以使用转换(DATE,entryTime)作为select和group 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)