我有一个“大”(数十万行)表(称为数据点)。另一个与数据点具有一对多关系的“事件”表。events 表有一个 TimeStamp 类型的列DateTimeOffset
。我想查询某个时间范围内的所有数据点,但有一个重要警告:我需要插值到输入截止时间。
例如:假设我在过去的随机分布时间(-1 小时、-5 小时、-8 小时、-11 小时和 -13 小时)有事件。这些事件中的每一个都创建了一些数据点,我想查询过去 12 小时内的所有数据点。我需要获取与所有这些点相关的数据点(包括 -13 小时点)。这样做的原因是因为我需要截止时间(-12 小时)的数据,因此我需要 -11 小时点和 -13 小时点,因此我可以插值到 -12 小时。我不能只是简单地说where dataPoint.Event.Time > currentTime - 12
,我还需要再得到一分。
有没有办法在 LINQ to SQL 中表达这一点?我只提出了2个想法:
1)使用一些启发式方法(将截止值乘以 2)以确保我有足够的分数。这不是健壮的并且可能是浪费的。
2)首先查询所有事件,对它们进行排序,通过手动滚动确定哪个事件是我想要的最后一个事件,然后查询时间戳小于计算事件的所有数据点。这个需要很多代码,也很浪费。
还有其他想法吗?