SQL Server的股票报价每秒
我有股票的表报价SQL Server的股票报价每秒
符号
向
投标
QuoteDateTime
使用SQL Server 2008,可以说为我想任何在六十秒时间在所有符号上选择引号,以便在该时间段内每秒都有记录。
问题并非每个符号都具有相同的引号数量 - 因此有几秒钟的时间内没有任何给定符号的引用记录。所以我想填补数据漏洞。所以如果ORCL在第1,2,3,5,7部分有引号,我希望结果集有1,2,3,4,5,6,7 ...最多60秒(覆盖整个分钟) 。第4行的值来自第3行
在这种情况下,我想选择以前的报价并使用该报价。因此每个符号都有连续的记录,每个符号选择相同数量的记录。
我不知道这就是所谓的SQL服务器,但任何构建查询做到这帮助将是巨大的
对于输出我期待,对于任何给定的60秒时间。对于那些必须在60秒的记录符号,将有60条记录每一个符号,每一个第二
符号要求Bid QuoteDateTime
MSFT 26.00 27.00 2010-05-20 6时28分00秒
MSFT 26.01 27.02 2010-05-20 6时28分01秒
...
ORCL 26.00 27.00 2010-05-20 6点28分00秒
ORCL 26.01 27.02 2010-05-20 6时28分01秒
etc
这是一种方法。三角形连接也可以使用。想知道有没有其他的选择?
DECLARE @startTime DATETIME = '2010-09-16 14:59:00.000';
WITH Times AS
(
SELECT @startTime AS T
UNION ALL
SELECT DATEADD(SECOND,1, T) FROM Times
WHERE T < DATEADD(MINUTE,1,@startTime)
),
Stocks AS
(
SELECT 'GOOG' AS Symbol
UNION ALL
SELECT 'MSFT'
),
Prices AS
(
SELECT 'GOOG' AS Symbol, 1 AS Ask, 1 AS Bid,
CAST('2010-09-16 14:59:02.000' AS DATETIME) AS QuoteDateTime
UNION ALL
SELECT 'GOOG' AS Symbol, 1 AS Ask, 1 AS Bid,
CAST('2010-09-16 14:59:02.000' AS DATETIME) AS QuoteDateTime
UNION ALL
SELECT 'GOOG' AS Symbol, 1 AS Ask, 1 AS Bid,
CAST('2010-09-16 14:59:02.000' AS DATETIME) AS QuoteDateTime
UNION ALL
SELECT 'MSFT' AS Symbol, 1 AS Ask, 1 AS Bid,
CAST('2010-09-01 12:00:00.000' AS DATETIME) AS QuoteDateTime
)
SELECT p.Symbol, p.Ask, p.Bid, p.QuoteDateTime
FROM Times t CROSS JOIN Stocks s
CROSS APPLY
(SELECT TOP 1 p.Symbol, p.Ask, p.Bid, p.QuoteDateTime
FROM Prices p
WHERE s.Symbol = p.Symbol AND p.QuoteDateTime <= t.T) p
谢谢我试图澄清更多在我的在上面发帖 – chrisg 2010-09-16 14:28:47
你的时间格式的精度是多少?例如将所有的值都舍入为秒,如'2010-09-16 14:59:57.000'。如果亚秒能够每秒有多于一个的记录? – 2010-09-16 14:01:51
你能给出一个输出示例吗?这可能有助于更好地阐明你的期望。至少我发现你的解释有点混乱。 – InSane 2010-09-16 14:05:50
精度是毫秒,如2010-05-20 06:28:07.850但我打算做第二组确保每秒只有一个记录,如果它存在 – chrisg 2010-09-16 14:09:13