2014-03-26 44 views
0

我已经继承了一个非常大的SQL Server数据库来处理(1,000,000多行数据)。 数据显示购买和销售物品的细节不重要。 我需要通过比较日期和时间中靠近的数据行来查找此数据中的异常情况。SQL通过比较数据行来分析数据

当前显示的数据显示在下图的左侧。

enter image description here

但是我想要做的是展示在右侧,与根据什么买什么卖给连续项相匹配。我通过重新排列Excel中数据行的顺序手动生成此示例,将匹配的“已购买”和“已售出”项目进行配对。这表明一个异常的销售没有相应的购买。我需要在整个数据库中为所有数百万行数据再现这种类型的分析。

相应的买卖交易应该在几分钟内发生,如果它们不是潜在的另一个异常交易指标。

在SQL中实现这一点目前超出了我的脚本编写技能,并且我询问是否有人能够给我一些有用的提示/技巧,或者指出我可能会让我开始解决这个问题的文章。

回答

1

不知道你的表结构和业务逻辑,将无法提供确切的查询。但是你需要的是Analytic Functions,它允许你从多行读取数据并比较当前行。特定的功能,你需要看看

LAG() OVER (PARTITION BY ORDER BY) 
LEAD() OVER (PARTITION BY ORDER BY) 
SUM() OVER (ORDER BY) 
SUM() OVER (PARTITION BY ORDER BY ROWS BETWEEN UNBOUND PRECEDING AND CURRENT ROW) 

如果您正在运行有可供喜欢做running total指这个问题Calculate a Running Total in SQL Server甚至更​​多的功能。