我将金融工具的价格数据事件存储在表格中。由于同一时间戳可能有多个事件,因此表的主键包含符号,时间戳和“顺序”字段。插入行时,如果没有其他行具有相同的时间戳和符号,则order字段应为零。否则它应该是相同时间戳和符号的最大顺序之一。
旧版本的数据库使用不同的架构。它为表中的每一行都有一个唯一的Guid,然后有符号和时间戳。因此,它不会在具有相同时间戳的多个刻度之间保留顺序。
我想编写一个T-SQL脚本来将数据从旧数据库复制到新数据库。我想做这样的事情:
INSERT INTO NewTable (Symbol, Timestamp, Order, OtherFields)
SELECT OldTable.Symbol, OldTable.TimeStamp, <???>, OldTable.OtherFields
FROM OldTable
但我不确定如何表达我想要的Order字段,或者甚至可以这样做。
执行此数据转换的最佳方法是什么?
我希望这可以在SQL Server 2005或2008上运行。
答案 0 :(得分:3)
这看起来像...... ROW_NUMBER
!
INSERT INTO NewTable (Symbol, Timestamp, Order, OtherFields)
SELECT
ot.Symbol, ot.TimeStamp,
ROW_NUMBER() OVER
(
PARTITION BY ot.Symbol, ot.Timestamp
ORDER BY ot.SomeOtherField
) - 1 AS Order,
ot.OtherFields
FROM OldTable ot
PARTITION BY
表示每组Symbol
和Timestamp
的行号都是唯一的。 ORDER BY
指定生成序列的顺序。