假设的例子:
我有一个包含十亿左右交易的SQL表:
| Cost | DateTime | | 1.00 | 2009-01-02 | | 2.00 | 2009-01-03 | | 2.00 | 2009-01-04 | | 3.00 | 2009-01-05 | | 1.00 | 2009-01-06 | ...
我想要的是配对数据,以便我只看到费用过渡:
| Cost | DateTime | | 1.00 | 2009-01-02 | | 2.00 | 2009-01-03 | | 3.00 | 2009-01-05 | | 1.00 | 2009-01-06 | ...
最简单(也是最慢)的方法是迭代整个表,跟踪更改。在SQL中有更快/更好的方法吗?
答案 0 :(得分:0)
没有。没有更快的方法。您可以编写一个执行相同工作的查询但速度会慢得多。您(作为开发人员)知道您需要仅将值与其直接的先前值进行比较,并且无法使用SQL指定此值。所以你可以做SQL不能的优化。 所以我想最快的是编写一个程序,从磁盘中流出结果,只在RAM中保存最后一个有效值和当前值(过滤掉每个等于最后一个有效值的值)。
答案 1 :(得分:0)
这是在需要锤子时尝试使用大锤的典型示例。您想从表中提取一些疯狂的报告数据,但这样做会杀死您的SQL Server。跟踪更改需要做的是创建专门用于此目的的跟踪表。然后使用触发器将产品中的值更改记录到此表中。所以在我的产品表上,当我更改价格时,它会进入价格跟踪表。
如果您使用它来跟踪股票价格或类似的东西,那么您再次使用相同的方法,除非您对价格表进行比较,如果发生了变化,则保存它。因此,比较仅发生在新数据上,所有旧的比较仍然存放在一个位置,因此您不需要重新运行将破坏SQL Server性能的查询。