尝试根据1小时的时间跨度对数据进行分组,并获取数据表中另一列的平均值。数据表可以包含2个或更多值列,其中包含1个datetime coulmn。
例:
time result1 result2
1/1/2013 1:38:03 AM 2.3 3.2
1/1/2013 1:52:23 AM 2.5 4.2
1/1/2013 1:54:43 AM 4.1 1.9
1/1/2013 1:57:00 AM 3.3 5.1
1/1/2013 2:11:28 AM 3.2 0
1/1/2013 2:43:58 AM 3.3 8.4
1/1/2013 2:46:20 AM 4.3 3.3
1/1/2013 4:50:47 AM 3.9 2.3
1/1/2013 6:48:57 AM 3.3 4.3
预期:每小时分组(日期将相同)和结果平均值
time result1 result2
1/1/2013 1:38:03 AM (2.3+2.5+4.1+3.3)/4 (3.2+4.2+1.9+5.1)/4
1/1/2013 2:11:28 AM (3.2+3.3+4.3)/3 (0+8.4+3.3)/3
1/1/2013 4:50:47 AM 3.9/1 2.3/1
1/1/2013 6:48:57 AM 3.3/1 4.3/1
我们可以在数据表上使用Linq查询来获得此结果吗?尝试了谷歌的一些样本没有为我工作..
答案 0 :(得分:0)
首先,考虑如果在常规SQL查询中执行此操作,将如何操作。您希望按日期和小时进行分组,并汇总相应的字段。
select min([time]) as [time], avg([result1]) as [result1], avg([result2]) as [result2]
from some_table
group by convert(date, [time]), datepart(hour, [time])
order by [time]
然后使用linq做同样的事情:
from t in db.SomeTable
orderby t.Time
group t by new { t.Time.Date, t.Time.Hour } into g
select new
{
Time = g.Min(t => t.Time),
Result1 = g.Average(t => t.Result1),
Result2 = g.Average(t => t.Result2),
}