我想知道有一个非常常见的查询有哪些工具:例如,给定 2 个包含时间排序数据的表,我希望随着时间向前滚动获得包含最新值的结果。
具体来说,假设我有两个表格,交易和报价。它们看起来像这样:
trades: timestamp, symbol, price
quotes: timestamp, symbol, bid, offer
我想要一个结果表,如下所示:
resultset: timestamp, symbol, price, bid, offer
请注意,每个实例在时间上,我都想要交易和交易时的最新报价。
通常,这个查询需要(我相信)三个自我联接 - 对于每天不做sql的人来说非常讨厌。更糟糕的是,我确定我是否需要包含来自其他 5 或 6 个表的信息。
是否有 sql 的变体或扩展使此类查询更简单?
我读过关于sql的时间序列扩展,近年来对标准sql以及供应商特定版本进行了各种更新。
我试图熟悉标准、行业甚至学术界的内容,以改进查询此类有序数据的方式。
我会尝试这样的事情:
select q.timestamp, q.symbol, t.price, q.bid, q.offer
from trades t
inner join quotes q
on t.timestamp = q.timestamp and t.symbol = q.symbol
where ROW_NUMBER() OVER(PARTITION BY q.timestamp, q.symbol ORDER BY q.timestamp DESC) = 1