SQL通过比较数据行分析数据

SQL通过比较数据行分析数据,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我继承了一个非常大的SQL Server数据库来处理(1000000多行数据)。 数据显示物品的购买和销售。物品的细节并不重要。 我需要通过比较在日期和时间上发生在一起的数据行来查找这些数据中的异常 目前的数据如下图左侧所示 然而,我想做的是在右边展示,根据买什么和卖什么来匹配连续的项目。我通过在Excel中重新排列数据行的顺序,配对匹配的“购买”和“出售”项目,手动生成了这个示例。这表明一次异常销售没有相应的购买。我需要在整个数据库中为所有超过百万行的数据复制这种类型的分析 相应的买卖交易应

我继承了一个非常大的SQL Server数据库来处理(1000000多行数据)。 数据显示物品的购买和销售。物品的细节并不重要。 我需要通过比较在日期和时间上发生在一起的数据行来查找这些数据中的异常

目前的数据如下图左侧所示

然而,我想做的是在右边展示,根据买什么和卖什么来匹配连续的项目。我通过在Excel中重新排列数据行的顺序,配对匹配的“购买”和“出售”项目,手动生成了这个示例。这表明一次异常销售没有相应的购买。我需要在整个数据库中为所有超过百万行的数据复制这种类型的分析

相应的买卖交易应在几分钟内发生,如果不发生,这可能是异常交易的另一个指标


在SQL中实现这一点目前超出了我的脚本编写能力,我想知道是否有人能给我一些有用的提示/技巧,或者给我一篇文章,让我开始解决这个问题。

如果不了解表结构和业务逻辑,就不可能提供精确的查询。但您需要的是允许您从多行读取数据并将其与当前行进行比较。需要查看的特定函数

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
,请参阅此问题