2016-10-19 1 views
1

Szenario: Ich habe Rechnungen auf verschiedenen Konten, in einer SQL Server-Datenbank gespeichert, über eine Reihe von Monaten.SQL Server: finden Instanz der Werte, die abweichen

heißt

AccountNum  BillNum  BillMonth BillTotal  
--------------------------------------------------- 
123456   123456-1  201601  $100000.00  
123456   123456-2  201602  $100000.00  
123456   123456-3  201603  $100000.00  
123456   123456-4  201604  $130000.00  
456789   456789-1  201601  $250000.00  
456789   456789-2  201602  $250000.00  
456789   456789-3  201603  $250000.00  
456789   456789-4  201604  $200000.00  

Ich versuche, eine Abfrage zu schreiben, die Ausreißer/Abweichungen zeigen, die von> xx% für einen bestimmten Zeitraum abweichen. Im obigen Datensatz unterscheiden sich die Zeilen 4 und 8 erheblich von dem, was ich als "normalen" Betrag von 100.000 US-Dollar pro Monat betrachten würde, was möglicherweise auf ein Problem hindeutet.

Ich brauche einen Weg, um die Rechnungen nach Konto zu berechnen (da jedes Konto eine andere Rechnung/Gebühren usw.) und finden Sie, wo die Abweichung mehr als 10% für einen bestimmten Monat ist.

Ich habe versucht, mit STDEV, aber kann es nicht ganz hinarbeiten.

Antwort

1

Sie können versuchen, die folgende Abfrage verwenden:

SELECT AccountNum, BillNum, BillMonth, BillTotal, 
     CASE 
      WHEN ABS(BillTotal - AVG(BillTotal) OVER (PARTITION BY AccountNum)) > 
       STDEV(BillTotal) OVER (PARTITION BY AccountNum) 
      THEN 1 
      ELSE 0 
     END AS deviates 
FROM mytable 

Die obige Abfrage ein 1 für die Datensätze zurückgibt eine BillTotal Menge aufweist, die für die spezifischen AccountNum mehr als die Standardabweichung vom Mittelwert des Feldes abweicht .

+0

Danke. Ich denke, das wird funktionieren. Ich habe noch ein anderes Problem damit, wo es mehrere Rechnungen für das Konto innerhalb des Monats gibt. Ich denke, ich werde nur Accounts hinzufügen, die nur eine Rechnung haben, da es sonst wahrscheinlich zu fehlerhaft wäre. – TaylorN

Verwandte Themen