我有一个多个符号的报价表
ID INT
SYMBOL NVARCHAR(6)
DT DATETIME
PRICE DECIMAL(18,5)
SYMBOL NVARCHAR(6)
我想只从QUOTES中提取那些符号也在临时表中的符号,这些符号可能会根据用户请求而变化
Create TABLE TempSymbol
(
SYMBOL NVARCHAR(6) NOT NULL
);
INSERT INTO TempSymbol(SYMBOL) VALUES ('MSFT');
INSERT INTO TempSymbol(SYMBOL) VALUES ('INTC');
INSERT INTO TempSymbol(SYMBOL) VALUES ('AAPL');
我想要一个将从QUOTES返回以下数据的查询...
datetime symbol1 | price1 | symbol2 | price2 | symbol3 | price3
2012-11-12 12:10:00 MSFT | 12.10 | INTC | 5.68 | AAPL | 16.89
2012-11-12 12:15:00 MSFT | 12.22 | INTC | 5.97 | AAPL | 16.22
...
...
...
SELECT DT, SYMBOL, PRICE FROM QUOTE AS Q INNER JOIN TempSymbol AS TS ON Q.SYMBOL = TS.SYMBOL
这会返回我需要转移但是在SQLite中不可用的记录是否有另一种方法我应该尝试这个?任何帮助表示赞赏。
答案 0 :(得分:0)
SQL正在解决您设计的问题:检索数据。您可以添加ORDER BY DT
来创建相邻日期时间的记录。
如果你仔细考虑一下,你会发现SELECT
无法回复你想要的东西。它返回表行,SQL表行具有恒定长度。所以做你所谓的" pivot"不是SELECT
操作。您可能正在考虑电子表格中的支点。数据库不是电子表格。
之后,生成所需的报告最好使用带有SQLite接口的任何语言的小程序(在Android中,例如Java;否则为C或TCL)。进行查询。将行作为哈希,数组或ODM记录返回。其余的是对这些数据的几个循环。算法是:
last_dt = null
for row in all rows
if row.dt != last_dt
start new output line
print dt
last_dt = dt
end
print ' | ', row.symbol, ' | ', row.price
end
另一个注意事项:使用高级数据库功能(如存储过程和XML对象),您可以在SQL中实现此功能。 XML对象可以包含可变数量的字段。这里的限制是SQLite,它没有提供这些功能。
答案 1 :(得分:0)
试试这个
SELECT DT, SYMBOL, PRICE FROM QUOTE where SYMBOL in (Select SYMBOL from TempSymbol)