SQL Select 下一行有条件数据

SQL Select with conditional data for next row

我想检索一些收盘价数据并将其与我选择的两个日期进行比较。例如,如果我想查看股票价格从 1/1/201/1/21 的变化,我希望它通过所有列出的股票和 return 给我一个比较这两天的价格。比较是收盘价变化、百分比变化、前一天收盘价、最后一天收盘价、最后一天时间(或者至少这是我想从数据库中检索的数据)。

目前,我必须让它工作的是查询
"SELECT Code, Close, Date FROM StockData WHERE DateInSeconds = " + from + " OR DateInSeconds = " + to + " ORDER BY Code ASC, DateInSeconds";

Code is the code name for a company
Close is the close price
Date is the formatted date (in a string) 'dd-mm-yyyy'
DateInSeconds is the timestamp for that date so that I can sort by it
from is the timestamp for the first date
to is the timestamp for the second date

加载第 1 天和第 2 天的收盘价,然后我的 C++ 程序遍历收盘价数组并检查下一个元素是否是相同的代码(因为它可能错过日期,或者不是最新的) ,如果是,则进行比较。这是非常低效的,因为我将数据复制到一个数组中,然后对其进行操作并将其复制到另一个数组中,而如果查询将发送正确的数据以避免这种情况,我会更喜欢它。

table 的一个例子是

Code       Date         Close      DateInSeconds

ASX     01-01-2000      1.00       946645200
ASX     02-01-2000      1.10       946731600
.
.
ASX     02-07-2021      50.00      1625148000
.
.
ANZ     01-01-2000      1.00       946645200
.
.

有一些虚拟收盘价。

以及带有日期 (Date, Close: { 01-01-2021, 100 }, { 02-01-2021, 150 }) 的输出示例(存储在程序中的数组中)

Code   CloseChange   CloseChangePercent   Previous       Last         Date
ASX    +50.00        +50.00%              100.00         150.00      02-01-2021
.
Company 2...
Company 3...
.
.

当您想将 2 行输入合并为 1 行输出时,您可以使用连接来实现:

SELECT
    sdfrom.Code,
    sdfrom.DateInSeconds as FromDate,
    sdfrom.Close as FromClose,
    sdto.DateInSeconds as ToDate,
    sdto.Close as ToClose
FROM StockData sdfrom
    INNER JOIN StockData sdto ON (sdfrom.Code = sdto.Code AND sdto.DateInSeconds = @toDate)
WHERE sdfrom.DateInSeconds = @fromDate

这是一个内部联接,因此起始和终止记录都必须存在。