sql/linq到实体:按小时分组
我有一张表,上面有我每小时收到的降雪数据。 例如,在凌晨0点到凌晨1点之间会下1厘米的雪,凌晨1点到凌晨2点之间会下3厘米的雪,凌晨2点到凌晨3点之间会下0厘米的雪,凌晨3点到凌晨4点之间会下2厘米的雪等等。 因此,该表有一个Snowdate列(datetime)、一个Snowdate小时列(int)和一个snowfall列(int) 现在,我想按6小时(0-5、6-11、12-17和18-23)分组显示数据,因此,当早上0点到6点之间,我有6条记录(1cm、3c、0cm、2cm、0cm),我想在一天的剩余时间显示一行数字8,以此类推。 数据库中每天每小时都有一条记录,因此每天总是有24条记录 纯sql解决方案(视图等)或linq to实体也可以 Michel按小时/6分组(使用整数算法),然后选择用于对金额列进行分组。选择一个新对象,键*6和Sum()为该“小时”的总计结果分组。“小时”将是每个范围内的第一个小时sql/linq到实体:按小时分组,sql,sql-server,entity-framework,Sql,Sql Server,Entity Framework,我有一张表,上面有我每小时收到的降雪数据。 例如,在凌晨0点到凌晨1点之间会下1厘米的雪,凌晨1点到凌晨2点之间会下3厘米的雪,凌晨2点到凌晨3点之间会下0厘米的雪,凌晨3点到凌晨4点之间会下2厘米的雪等等。 因此,该表有一个Snowdate列(datetime)、一个Snowdate小时列(int)和一个snowfall列(int) 现在,我想按6小时(0-5、6-11、12-17和18-23)分组显示数据,因此,当早上0点到6点之间,我有6条记录(1cm、3c、0cm、2cm、0cm),我想
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()
})
});
按小时/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()
})
});
如果我理解正确,试试这样的方法
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.)
如果我理解正确,试试这样的方法
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.)
谢谢你的解决方案,但我发现它们有时很难阅读,lambda的东西。我已经用简单的方法做了一些,但是在这种情况下,我更容易阅读sql。谢谢你的解决方案,但是我发现有时候很难阅读lambda的东西。我已经用简单的方法做了一些,但是在这种情况下,我更容易阅读sql。