這是我第一次真實世界的LINQ-to-SQL查詢。我想知道我是否犯了大的,明顯的錯誤。這是LINQ查詢有效寫入的平均和小時分組嗎?
我有一個大中型(2M +記錄,每天增加13k)表與數據,dataTypeID,machineID和dateStamp。我想在4小時內從所有機器和特定數據類型中獲取數據的平均值,最小值和最大值,並追溯到28天。
E.g
日期時間 平均 民 最大
1/1/10 12:00 AM 74.2 72.1 75 0.7
1/1/10上午4點 74.5 73.1 76.2
1/1/10 08:00 AM 73.7 71.5 74.2
1/1/10 12:00 PM 73.2 71.2 76.1
等。
1/28/10 12:00 AM 73.1 71.3 75.5
到目前爲止,我只能夠組平均1倍小時的增量,但我很可能與處理,如果該方案過於凌亂。
代碼:
var q =
from d in DataPointTable
where d.dateStamp > DateTime.Now.AddDays(-28) && (d.dataTypeID == (int)dataType + 1)
group d by new {
d.dateStamp.Year,
d.dateStamp.Month,
d.dateStamp.Day,
d.dateStamp.Hour
} into groupedData
orderby groupedData.Key.Year, groupedData.Key.Month, groupedData.Key.Day, groupedData.Key.Hour ascending
select new {
date = Convert.ToDateTime(
groupedData.Key.Year.ToString() + "-" +
groupedData.Key.Month.ToString() + "-" +
groupedData.Key.Day.ToString() + " " +
groupedData.Key.Hour.ToString() + ":00"
),
avg = groupedData.Average(d => d.data),
max = groupedData.Max(d => d.data),
min = groupedData.Min(d => d.data)
};
+1爲'dateStamp'上的索引+1 – 2010-02-18 19:05:27
感謝您的建議。 我曾試過「d.dateStamp.Hour/4」,但它不合法。 VS2008說:「無效的匿名類型成員聲明。匿名類型成員必須聲明與成員分配,簡單名稱或成員訪問。」 – PHiZiX 2010-02-19 00:20:42
對不起 - 它需要一個名字... – tvanfosson 2010-02-19 02:42:08