Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql/linq到实体:按小时分组_Sql_Sql Server_Entity Framework - Fatal编程技术网

sql/linq到实体:按小时分组

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),我想

我有一张表,上面有我每小时收到的降雪数据。 例如,在凌晨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()为该“小时”的总计结果分组。“小时”将是每个范围内的第一个小时

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。