日期时间值对的给定分钟分辨率的平均值
本文关键字:分钟 分辨率 平均值 日期 时间 | 更新日期: 2023-09-27 18:32:16
以下查询似乎工作得很好:
var query =
Session.Query<SomeEvent>()
.Where(
p =>
p.Timestamp >= from.Now
&& p.Timestamp <= to.Now
)
.GroupBy(x => x.Timestamp)
.AsEnumerable()
.Select(
x =>
new SomeEvent {Timestamp = x.Key, DisplayValue = x.Average(y => y.DisplayValue)})
.OrderBy(x => x.Timestamp);
在平均显示值时,如果时间戳(日期时间)存在重复项。我只是好奇是否也可以根据"分辨率"(例如在 30 分钟内)对值求平均值?
这个怎么样?我引入了一个称为分辨率级别的概念,它为每个时间戳差异范围提供了一个分级键:如果在 30 分钟内为 1,如果在 60 分钟内为 2,如果在 90 分钟内为 3......等等。根据这些级别,查询可以对每个级别求平均值
double resolutionInMins = 30; // In minites
double divisor = to.Now.AddMinutes(resolutionInMins).Ticks - to.Now.Ticks;
Func<DateTime, double> resolutionLevel =
delegate(DateTime timestamp)
{
return Math.Ceiling((to.Now.Ticks - timestamp.Ticks) / divisor);
};
var query =
Session.Query<SomeEvent>()
.Where(p =>
p.Timestamp >= from.Now &&
p.Timestamp <= to.Now)
.GroupBy(x => new
{
ResolutionLevel = resolutionLevel(x.Timestamp)
})
.Select(x => new
{
ResolutionLevel = x.Key.ResolutionLevel,
ResolutionAvgValue = x.Average(b => b.DisplayValue)
});