nhibernate在日期范围内选择n个点

时间:2012-06-12 18:13:52

标签: mysql nhibernate

所以这是我的情况:我有两个包含统计信息的表,一个用于统计定义的表和一个用于统计事件的表。 stats事件表中的每一行都有一个时间戳,一个值和一个对它应用的统计定义的引用,每个统计定义都有一个stat条目集合。 (即一对多)

我的应用允许用户选择统计定义和日期范围,并根据所选定义的统计事件表绘制条目。但是,用户可以选择较大的日期范围,这可能导致返回的事件数量大于必要的数量。

我想返回在用户选择的时间范围内均匀分布的数据子集(n个点)。我目前的(幼稚)实施如下:

var totalEntries = session.QueryOver<StatEvent>()
                          .Where(x => x.Date > start_date && x.Date < end_date && StatDef.Id == defn.Id)
                          .List()
int modFactor = (int) Math.Ceiling((double)totalEntries.Count/30);
var temp = totalEntries.Where((x, i) => i%modFactor == 0);
return temp.OrderBy(x => x.Date).ToList();

所以我正在从匹配日期范围和统计数据的数据库中检索所有记录,然后选择30个条目。

这种方法的问题是:

1)从数据库获取所有条目,然后丢弃我不想要的条目是低效的。

2)如果数据聚集(即在一定时间内有许多记录,而在另一时间内记录的记录不多),则选择将加权到具有最多数据的位置。这不一定是坏事,但我希望我的图表更漂亮,并且均匀分布数据点。

那么,有没有人知道以更有效的方式实现相同结果的智能方法?

谢谢!

1 个答案:

答案 0 :(得分:0)

我建议聚合一组间隔的值,其中间隔的大小计算为所选日期范围的1/30。您聚合的方式取决于统计数据,但是一个天真的实现可以将它们相加或平均或获得最大值。