我有一个包含降雪数据的表,我每小时都会收到这些数据。例如,在凌晨0点到凌晨1点之间会有1厘米的降雪,在凌晨1点到凌晨2点之间会有3厘米的降雪,在凌晨2点到凌晨3点之间会有0厘米的降雪,在凌晨3点到凌晨4点之间会有2厘米的降雪等等。所以表中有一个Snowdate列(datetime),一个Snowdate hour列(int)和一个snow data列(int)。现在我想给出按6小时分组的数据(0-5,6-11,12-17和18-23),所以当在0am和6am之间时,我有6个记录(1 cm,3c,0 cm,2 cm )。0 0cm),我想显示一行数字8,然后在今天剩下的时间里依此类推。对于一天中的每一个小时,在数据库中都会有一条记录,所以一天总是有24条记录
纯sql解决方案也可以(视图之类的),或者linq to entities也可以。
米歇尔
发布于 2009-11-04 21:45:41
如果我没理解错的话,试着这样做
DECLARE @Table TABLE(
SnowDate DATETIME,
SnowHour INT,
SnowFall INT
)
INSERT INTO @Table (SnowDate,SnowHour,SnowFall) SELECT '10 Sep 2009', 0, 1
INSERT INTO @Table (SnowDate,SnowHour,SnowFall) SELECT '10 Sep 2009', 1, 3
INSERT INTO @Table (SnowDate,SnowHour,SnowFall) SELECT '10 Sep 2009', 2, 0
INSERT INTO @Table (SnowDate,SnowHour,SnowFall) SELECT '10 Sep 2009', 3, 2
INSERT INTO @Table (SnowDate,SnowHour,SnowFall) SELECT '10 Sep 2009', 4, 2
INSERT INTO @Table (SnowDate,SnowHour,SnowFall) SELECT '10 Sep 2009', 5, 0
INSERT INTO @Table (SnowDate,SnowHour,SnowFall) SELECT '10 Sep 2009', 6, 10
INSERT INTO @Table (SnowDate,SnowHour,SnowFall) SELECT '10 Sep 2009', 7, 10
SELECT SnowDate,
CAST(FLOOR((SnowHour) / 6.) * 6 AS VARCHAR(4)) + ' TO ' + CAST((FLOOR((SnowHour) / 6.) + 1) * 6 - 1 AS VARCHAR(4)),
SUM(SnowFall) AS Total
FROM @Table
GROUP BY SnowDate,
FLOOR((SnowHour) / 6.)发布于 2009-11-04 21:44:50
按小时/6分组(使用整数算法),并选择对金额列进行分组。选择一个新对象,键*6和Sum()为该“小时”的合计结果分组。“小时”将是每个范围内的第一个小时。
var query = db.SnowRecords.GroupBy( s => s.SnowHour / 6, a => a.SnowFall )
.Select( g => new {
Hour = g.Key * 6,
Amount = g.Sum()
});您没有说是否还需要按日期分组,但如果您这样做了,那么这将成为对按日期分组的记录的内部查询。
var query = db.SnowRecords.GroupBy( s => s.SnowDate.Date )
.Select( g => new {
Date = g.Key,
HourlySnowFall = g.GroupBy( s => s.SnowHour / 6, a => a.SnowFall )
.Select( sg => new {
Hour = sg.Key * 6,
Amount = sg.Sum()
})
});https://stackoverflow.com/questions/1673737
复制相似问题