如何查询多个时间排序表中的“最新”值?

时间:2016-02-18 22:58:02

标签: sql time-series

我想知道一个非常常见的查询有哪些设施: 比方说,如果包含时间排序数据的2个表,我希望得到包含最新值的结果作为时间推进。

具体来说,我说有两张桌子,交易和报价。它们看起来像这样:

trades: timestamp, symbol, price
quotes: timestamp, symbol, bid, offer

我想要一个看起来像这样的结果表:

resultset: timestamp, symbol, price, bid, offer

请注意每个实例及时,我想要交易时的交易和最近的报价。

通常这个查询需要(我相信)三个自我加入 - 对于每天不做sql的人来说非常讨厌。更糟糕的是,我确信我是否还需要包含来自其他5个或6个表的信息。

是否有sql的变体或扩展使这些查询更简单?

我读过关于sql的时间序列扩展,近年来已经对标准sql以及供应商特定版本进行了各种更新。

我正在努力让自己熟悉标准,行业甚至学术界的内容,以改善查询此类有序数据的方式。

1 个答案:

答案 0 :(得分:1)

我会尝试这样的事情:

    ConnectionString = "Provider=SQLOLEDB.1;Password=***;Persist Security Info=True;User ID=***;Data Source=***\***;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=***"
    cnn.Open ConnectionString
    cnn.CommandTimeout = 900

    List = "BomLine(iCountItem).PartNo"

    For Each xyz in BomLine

        StrQuery = "SELECT * FROM [MY_Table] WHERE [MY_Column]='" _
                     & xyz.PartNo & "'"    

        rst.Open StrQuery, cnn

        OExcel.Worksheets(1).cells(rows.count, _
                   1).end(xlUp).Offset(1,0).CopyFromRecordset rst

    Next xyz