我继承了一个非常大的SQL Server数据库(1,000,000多行数据)。 数据显示项目的购买和销售,项目的详细信息并不重要。 我需要通过比较日期和时间中出现的数据行来查找此数据中的异常。
下面的图片左侧显示了当前观察的数据。
然而,我想要做的是在右边展示,连续的项目根据购买的东西和销售的东西进行匹配。我通过重新排列Excel中数据行的顺序手动生成了这个示例,将匹配的“Bought”和“Sold”项配对。这表明一个异常销售,没有相应的购买。我需要在整个数据库中重现这种类型的分析,以获得所有数百万行数据。
相应的买入和卖出交易应该在几分钟之内进行,如果它们不是可能是异常交易的另一个指标。
在SQL中实现这一点目前超出了我的脚本编写技能,我问是否有人可以给我一些有用的提示/技巧,或者指出一篇可能让我开始解决这个问题的文章。
答案 0 :(得分: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)
如果您正在运行sql-server-2012,可以使用更多功能来执行running total
,请参阅此问题Calculate a Running Total in SQL Server。