【发布时间】:2015-08-22 14:23:56
【问题描述】:
我有一个简单的表 data 来记录具有列 recorded_at DateTime 和 value Integer 的数据流。数据不是定期分布的,每分钟可能有多行,或者几个小时没有。
如果我想选择单个值,此查询非常适合我的目的,选择比我正在搜索的位置更接近的结果:
select * from data where recorded_at > '2015-01-01 01:01:01' limit 1
但是,除了使用上述重复查询的联合之外,我找不到一种有效的方法来选择最接近多个搜索日期的单个行,如果我想选择几百个点,这会创建一个巨大的查询。例如,如果我想要最接近“2015-01-01 01:01:01”的单行以及“2015-02-02 02:02:02”。
有没有更好的方法来做到这一点?
基本上我所追求的伪查询是:
select * from data where recorded_at NEAR (date1, date2, date3)
NEAR 像 IN 一样工作,但更模糊,因为我事先不知道确切的日期。
【问题讨论】:
-
那么你想要的是
n最接近的结果,而不仅仅是1? -
不,我在寻找与 N 个不同搜索日期最接近的 1 个结果,我会澄清这个问题。
-
假设表中有 6 个日期,
recorded_at值(1、2、4、5、6、7),您需要最接近 2 和 6 的日期。结果应该是什么? -
我不确定我是否理解您的要求。我编辑了我的问题,希望能更清楚。
-
我在问
NEAR应该如何工作。它应该只返回最接近所有日期的 1 条记录,还是应该在每个日期返回 1 条记录,每条记录最接近集合中提供的日期?