sql查询到插入选择

时间:2015-02-27 13:07:47

标签: sql sql-server sql-server-2008-r2

我的表格格式如下:

ID  curr    Date                    Bid     Ask
1   AUD/NZD 20090501 00:00:00.833   1.2866  1.28733
2   AUD/NZD 20090501 01:01:01.582   1.28667 1.2874
3   AUD/NZD 20090501 02:01:01.582   1.28667 1.28747

现在我需要选择Bid和Ask列的更改并存储到另一个表中...结果应如下所示

Bid Change  Ask Change  

0.0000700   0.0000700   
0.0000000   0.0000700   


select 
    t1.id, 
    t1.curr, 
    t1.date,
    t1.bid, 
    t1.bid - t2.bid [Bid Change],  
    t1.ask, 
    t1.ask - t2.ask [Ask Change]

from tbltest t1
left join tbltest t2 on t1.ID = t2.ID + 1
order by date

此查询会返回正确的所有内容,但出价更改和询问更改的格式除外,如下所示

 BID Change            ASK CHANGE
7.00000000000145E-05  7.00000000000145E-05

对于如何处理这种情况我真的很无能为力......任何一点帮助都会起作用。

提前致谢!

1 个答案:

答案 0 :(得分:1)

我似乎没有必要将它们存储在不同的表中,您可以使用APPLY动态计算它们,这样对基础数据的任何更改都不会导致您的更改数据陈旧:

SELECT  T.*,
        BidChange = t.Bid - prev.Bid,
        AskChange = t.Ask - prev.Ask
FROM    T
        OUTER APPLY
        (   SELECT  TOP 1 T2.Bid, T2.Ask
            FROM    T AS T2
            WHERE   T2.Curr = T.Curr
            AND     T2.Date < T.Date
            ORDER BY T2.Date DESC
        ) AS prev;

如果您经常需要这样的话,那么您可能需要考虑一个视图,而不是将其存储在表格中。


enter image description here