如何从多个时间排序表中查询"most recent"值?



我想知道有一个非常常见的查询有哪些工具:例如,给定 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