我有一个表,其中有返回某个时间范围内的数据的查询。行数稀疏,活动可能相隔几天。
我正在寻找一种方法来从范围中获取数据+在范围开始之前添加行(可以是小于开始的任何时间戳)。
例如:
2020-01-01 xxxxxxx
2020-01-12 xxxxxxx
2020-02-10 xxxxxxx
2020-02-11 xxxxxxx
2020-02-15 xxxxxxx
如果我查询 from 2020-02-08
to 2020-02-14
,我会得到:
2020-02-10 xxxxxxx
2020-02-11 xxxxxxx
但我想得到:
2020-01-12 xxxxxxx
2020-02-10 xxxxxxx
2020-02-11 xxxxxxx
如何才能做到这一点?
一种简单的解决方案可以提供所需的结果,但对于较大的数据,您可能会遇到一些性能问题。
要查找 的先前值、当前值
2020-02-10
,使用union与范围搜索结合,
请参阅此处的示例
这应该是最快和最简单的:
小提琴
通过索引,
(dt)
您可以获得两次非常快的索引扫描。如果 上可能存在重复项
(dt)
,则必须定义要选择的前一行,或接受给定查询中的任意选择。使用
UNION ALL
, notUNION
,这会尝试删除重复项 - 这要么浪费时间,要么不是您想要的。UNION
作为副作用,还可以对结果行重新排序。关于查询中的括号
UNION
:这通常返回按 排序的行
dt
。但请看:因此,您可能需要按
ORDER BY dt
注释附加以保证排序结果。