SQL Select 下一行有条件数据
SQL Select with conditional data for next row
我想检索一些收盘价数据并将其与我选择的两个日期进行比较。例如,如果我想查看股票价格从 1/1/20
到 1/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
这是一个内部联接,因此起始和终止记录都必须存在。
我想检索一些收盘价数据并将其与我选择的两个日期进行比较。例如,如果我想查看股票价格从 1/1/20
到 1/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
这是一个内部联接,因此起始和终止记录都必须存在。