2009-11-04 29 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