2014-03-26 46 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甚至更​​多的功能。