Binkenstein

Overwatch League Match Data Processing

May 21st, 2018
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.71 KB | None | 0 0
  1. WHILE (SELECT COUNT(ID) FROM Match WHERE Processed = 0 AND WinnerTeamID IS NOT NULL) > 0
  2. BEGIN
  3.  
  4. SELECT
  5. b.[TeamID]
  6. ,SUM(b.[StageAdjustedTeamRatingPoints]) AS RatingPoints
  7. ,SUM(b.[StageAdjustedGamePoints]) AS GamePoints
  8. INTO #Temp2
  9. FROM (SELECT
  10. z.[TeamID]
  11. ,z.[SeasonID]
  12. ,z.[StageID]
  13. ,z.[MatchID]
  14. ,z.[TeamRatingPoints]
  15. ,CASE
  16. WHEN z.[StageID] = s.[ID] OR z.[StageID] = s.[Stage100ID] THEN 1
  17. WHEN z.[StageID] = s.[Stage75ID] THEN 2/3
  18. WHEN z.[StageID] = s.[Stage50ID] THEN 1/3
  19. WHEN z.[StageID] = s.[Stage25ID] THEN 0
  20. ELSE 0
  21. END * z.[TeamRatingPoints] AS [StageAdjustedTeamRatingPoints]
  22. ,z.[GamePoints]
  23. ,CASE
  24. WHEN z.[StageID] = s.[ID] OR z.[StageID] = s.[Stage100ID] THEN 1
  25. WHEN z.[StageID] = s.[Stage75ID] THEN 2/3
  26. WHEN z.[StageID] = s.[Stage50ID] THEN 1/3
  27. WHEN z.[StageID] = s.[Stage25ID] THEN 0.25
  28. ELSE 0
  29. END * z.[GamePoints] AS [StageAdjustedGamePoints]
  30. FROM (SELECT
  31. TOP 1 *
  32. FROM Match
  33. WHERE Processed = 0
  34. AND WinnerTeamID IS NOT NULL
  35. ORDER BY ID ASC) AS a
  36. LEFT JOIN ((SELECT
  37. m.[ID] AS MatchID
  38. ,m.[AwayTeamID] AS TeamID
  39. ,m.[SeasonID]
  40. ,m.[StageID]
  41. ,m.[AwayRatingPoints] AS TeamRatingPoints
  42. ,m.[GamePoints]
  43. FROM Match AS m
  44. WHERE m.Processed = 1
  45. AND m.WinnerTeamID IS NOT NULL)
  46. UNION
  47. (SELECT
  48. m.[ID] AS MatchID
  49. ,m.[HomeTeamID] AS TeamID
  50. ,m.[SeasonID]
  51. ,m.[StageID]
  52. ,m.[HomeRatingPoints] AS TeamRatingPoints
  53. ,m.[GamePoints]
  54. FROM Match AS m
  55. WHERE m.Processed = 1
  56. AND m.WinnerTeamID IS NOT NULL)) AS z ON z.[MatchID] < a.[ID]
  57. AND (z.[TeamID] = a.[AwayTeamID]
  58. OR z.[TeamID] = a.[HomeTeamID])
  59. LEFT JOIN Stage AS s ON s.[ID] = a.[StageID]) AS b
  60. GROUP BY b.[TeamID]
  61.  
  62. SELECT
  63. h.[MatchID]
  64. ,h.[AwayTeamPoints] + h.[HomeTeamPoints] AS GamePoints
  65. ,h.[AwayTeamID]
  66. ,h.[AwayTeamPoints]
  67. ,h.[AwayRatingPointTotal] / h.[AwayGamePointTotal] AS AwayRating
  68. ,h.[AwayMod]
  69. ,CASE
  70. WHEN h.[AwayMod] = 50 THEN
  71. (h.[AwayTeamPoints] * (CASE WHEN h.[HomeRatingPointTotal] = 0 THEN 100 ELSE (h.[HomeRatingPointTotal] / h.[HomeGamePointTotal]) END + 50))
  72. + (h.[HomeTeamPoints] * (CASE WHEN h.[HomeRatingPointTotal] = 0 THEN 100 ELSE (h.[HomeRatingPointTotal]/h.[HomeGamePointTotal]) END - 50))
  73. ELSE (h.[AwayTeamPoints] * (CASE WHEN h.[AwayRatingPointTotal] = 0 THEN 100 ELSE (h.[AwayRatingPointTotal] / h.[AwayGamePointTotal]) END + h.[AwayMod]))
  74. + (h.[HomeTeamPoints] * (CASE WHEN h.[AwayRatingPointTotal] = 0 THEN 100 ELSE (h.[AwayRatingPointTotal] / h.[AwayGamePointTotal]) END - h.[HomeMod]))
  75. END AS AwayRatingPoints
  76. ,h.[HomeTeamID]
  77. ,h.[HomeTeamPoints]
  78. ,h.[HomeRatingPointTotal]
  79. ,h.[HomeGamePointTotal]
  80. ,h.[HomeRatingPointTotal] / h.[HomeGamePointTotal] AS HomeRating
  81. ,h.[HomeMod]
  82. ,CASE
  83. WHEN h.[HomeMod] = 50 THEN
  84. (h.[HomeTeamPoints] * (CASE WHEN h.[AwayRatingPointTotal] = 0 THEN 100 ELSE (h.[AwayRatingPointTotal] / h.[AwayGamePointTotal]) END + 50))
  85. + (h.[AwayTeamPoints] * (CASE WHEN h.[AwayRatingPointTotal] = 0 THEN 100 ELSE (h.[AwayRatingPointTotal]/h.[AwayGamePointTotal]) END - 50))
  86. ELSE (h.[HomeTeamPoints] * (CASE WHEN h.[HomeRatingPointTotal] = 0 THEN 100 ELSE (h.[HomeRatingPointTotal] / h.[HomeGamePointTotal]) END + h.[HomeMod]))
  87. + (h.[AwayTeamPoints] * (CASE WHEN h.[HomeRatingPointTotal] = 0 THEN 100 ELSE (h.[HomeRatingPointTotal] / h.[HomeGamePointTotal]) END - h.[AwayMod]))
  88. END AS HomeRatingPoints
  89. INTO #Temp
  90. FROM (SELECT
  91. a.[ID] AS MatchID
  92. ,a.[AwayTeamID]
  93. ,a.[AwayTeamPoints] + CASE WHEN a.[AwayTeamID] = a.[WinnerTeamID] THEN 1 ELSE 0 END AS AwayTeamPoints
  94. ,ISNULL(b.[RatingPoints],100) AS AwayRatingPointTotal
  95. ,ISNULL(b.[GamePoints],1) AS AwayGamePointTotal
  96. ,a.[HomeTeamID]
  97. ,a.[HomeTeamPoints] + CASE WHEN a.[HomeTeamID] = a.[WinnerTeamID] THEN 1 ELSE 0 END AS HomeTeamPoints
  98. ,ISNULL(c.[RatingPoints],100) AS HomeRatingPointTotal
  99. ,ISNULL(c.[GamePoints],1) AS HomeGamePointTotal
  100. ,CASE
  101. WHEN b.[RatingPoints] IS NOT NULL AND b.[GamePoints] IS NOT NULL AND c.[RatingPoints] IS NOT NULL AND c.[GamePoints] IS NOT NULL THEN
  102. CASE
  103. WHEN ABS((b.[RatingPoints]/b.[GamePoints]) - (c.[RatingPoints]/c.[GamePoints])) > 40 THEN
  104. CASE
  105. WHEN (b.[RatingPoints]/b.[GamePoints]) > (c.[RatingPoints]/c.[GamePoints]) THEN 10
  106. ELSE 90
  107. END
  108. ELSE 50
  109. END
  110. ELSE 50
  111. END AS AwayMod
  112. ,CASE
  113. WHEN b.[RatingPoints] IS NOT NULL AND b.[GamePoints] IS NOT NULL AND c.[RatingPoints] IS NOT NULL AND c.[GamePoints] IS NOT NULL THEN
  114. CASE
  115. WHEN ABS((b.[RatingPoints]/b.[GamePoints]) - (c.[RatingPoints]/c.[GamePoints])) > 40 THEN
  116. CASE
  117. WHEN (b.[RatingPoints]/b.[GamePoints]) < (c.[RatingPoints]/c.[GamePoints]) THEN 10
  118. ELSE 90
  119. END
  120. ELSE 50
  121. END
  122. ELSE 50
  123. END AS HomeMod
  124. FROM (SELECT
  125. TOP 1 *
  126. FROM Match
  127. WHERE Processed = 0
  128. AND WinnerTeamID IS NOT NULL
  129. ORDER BY ID ASC) AS a
  130. LEFT JOIN Stage AS s ON s.[ID] = a.[StageID]
  131. LEFT JOIN #Temp2 AS b ON b.[TeamID] = a.[AwayTeamID]
  132. LEFT JOIN #Temp2 AS c ON c.[TeamID] = a.[HomeTeamID]) AS h
  133.  
  134. UPDATE a
  135. SET a.[AwayRatingPoints] = z.[AwayRatingPoints]
  136. FROM match AS a
  137. INNER JOIN #Temp AS z ON z.[MatchID] = a.[ID]
  138.  
  139. UPDATE a
  140. SET a.[AwayRating] = z.[AwayRating]
  141. FROM match AS a
  142. INNER JOIN #Temp AS z ON z.[MatchID] = a.[ID]
  143.  
  144. UPDATE a
  145. SET a.[HomeRatingPoints] = z.[HomeRatingPoints]
  146. FROM match AS a
  147. INNER JOIN #Temp AS z ON z.[MatchID] = a.[ID]
  148.  
  149. UPDATE a
  150. SET a.[HomeRating] = z.[HomeRating]
  151. FROM match AS a
  152. INNER JOIN #Temp AS z ON z.[MatchID] = a.[ID]
  153.  
  154. UPDATE a
  155. SET a.[GamePoints] = z.[GamePoints]
  156. FROM match AS a
  157. INNER JOIN #Temp AS z ON z.[MatchID] = a.[ID]
  158.  
  159. UPDATE a
  160. SET Processed = 1
  161. FROM match AS a
  162. INNER JOIN #Temp AS z ON z.[MatchID] = a.[ID]
  163.  
  164. DROP TABLE #Temp
  165. DROP TABLE #Temp2
  166.  
  167. END;
Add Comment
Please, Sign In to add comment