ts_closest_elem() 函数返回第一个元素或非空且最接近给定时间戳记的元素的列。
语法
ts_tselem
ts_closest_elem(ts_tsdesc *tdesc,
mi_datetime *tstamp,
mi_string *cmp,
mi_string *col_list,
mi_integer flags, mi_integer *isNull,
mi_integer *off)
- tdesc
- ts_open 返回的时间系列描述符。
- tstamp
- 开始搜索的时间戳记。
- cmp
- 比较运算符。cmp 的有效值包括 <、<=、=、==、>= 和 >。
- col_list
- 要搜索具有特定非空列集的元素,请指定列名称的列表,以竖线 (|) 分隔。如果时间系列子行类型中不存在任何列名称,会发生错误。
要搜索非空元素,请将 col_list 设置为 NULL。
- flags
- 确定是否应返回隐藏的元素。flags 参数的有效值在 tseries.h 中定义。它们包括:
- TS_CLOSEST_NO_FLAGS(无特殊标志)
- TS_CLOSEST_RETNULLS_FLAGS(返回隐藏的元素)
- isNull
- isNull 参数不能为 NULL。返回时,使用 tseries.h 中找到的空指示符位设置该参数。包括:
- 0(不隐藏并分配元素)
- TS_NULL_NOTALLOCED(元素未写入)
- TS_NULL_HIDDEN(隐藏的元素)
- off
- 当时间系列为规则时间系列时,如果 off 不是 NULL,那么将在 off 参数中返回已返回元素的偏移量。
描述
ts_closest_elem 所使用的搜索算法如下所示:
- 如果 cmp 是 <=、=、== 或 >= 之一,那么搜索会从 tstamp 开始。
- 如果 cmp 是 <,那么搜索会从 tstamp 之前的第一个元素开始。
- 如果 cmp 是 >,那么搜索会从 tstamp 之后的第一个元素开始。
tstamp 和
cmp 参数用于确定搜索开始的位置。搜索以
cmp 指示的方向持续进行,直到找到符合条件的元素。如果没有符合条件的元素,那么返回值为
NULL。
重要: 对于不规则的时间系列,不规则元素中的值在下一个元素出现之前保持不变。这表示不规则时间系列上的任一先前“equals”操作将查找 <= first。如果 cmp 是 >= 且 <= 操作失败,那么该操作会转向下一个元素;否则,返回 NULL。