2009-11-04 30 views
0

我有一个表格,每小时收到一次雪数据。因此例如在凌晨1点到凌晨1点之间1厘米的雪会下降,凌晨1点和凌晨2点之间3厘米的雪会下降,凌晨2点和3点之间0厘米的雪会下降,凌晨3点和凌晨4点之间2厘米的雪会秋天等 所以表中有一个Snowdate列(日期时间),一个Snowdate小时列(int)和一个降雪列(int) 现在我想介绍按6小时组(0-5,6- 11,12-17和18-23),所以在上午0点到6点之间,我有6条记录(1厘米,3厘米,0厘米,2厘米,2厘米,0厘米),我想用8号显示一行,所以在一天的其余时间。 对于每天每小时会有一个记录在分贝,所以总是24记录一天sql/linq到实体:小组小组

一个纯粹的SQL解决方案将是好的(一个视图左右)或实体的LINQ也可以。

米歇尔

回答

1

如果我理解正确的,试一下这个

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.) 
+0

谢谢,很好的解决方案! – Michel 2009-11-04 14:50:23

3

由小时/ 6(使用整数运算)组,并选择用于分组的量列。选择一个新的对象,Key * 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() 
                }) 
          }); 
+0

感谢您的解决方案一样,但我觉得他们有时要读,拉姆达的东西。我已经做了一些简单的,但在这种情况下,我更容易阅读SQL。 – Michel 2009-11-04 14:51:45