如何在事务表中最好地提取转换?

时间:2009-04-21 14:32:53

标签: sql mysql

假设的例子:

我有一个包含十亿左右交易的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中有更快/更好的方法吗?

2 个答案:

答案 0 :(得分:0)

没有。没有更快的方法。您可以编写一个执行相同工作的查询但速度会慢得多。您(作为开发人员)知道您需要仅将值与其直接的先前值进行比较,并且无法使用SQL指定此值。所以你可以做SQL不能的优化。 所以我想最快的是编写一个程序,从磁盘中流出结果,只在RAM中保存最后一个有效值和当前值(过滤掉每个等于最后一个有效值的值)。

答案 1 :(得分:0)

这是在需要锤子时尝试使用大锤的典型示例。您想从表中提取一些疯狂的报告数据,但这样做会杀死您的SQL Server。跟踪更改需要做的是创建专门用于此目的的跟踪表。然后使用触发器将产品中的值更改记录到此表中。所以在我的产品表上,当我更改价格时,它会进入价格跟踪表。

如果您使用它来跟踪股票价格或类似的东西,那么您再次使用相同的方法,除非您对价格表进行比较,如果发生了变化,则保存它。因此,比较仅发生在新数据上,所有旧的比较仍然存放在一个位置,因此您不需要重新运行将破坏SQL Server性能的查询。