A
audrey
Guest
Ok, here's the layout: 1 table: Trainer Detail
Is there any way I can make this PITA query faster? Can i break this down into more smaller queries??? do ANYTHING to it to make it run in less time??? ANY and ALLLLL ideas are SO appreciated, you have no idea, lol. Here it is:
SELECT [T].[ID], [T].[Trainer], [T].[Date], [T].[Horse], [T].[Race], [T].[Fin_Pos], [T].[Odds], [T].[RACECLASS], [T].[Race_Sbred], [T].[Race_Age], [T].[Track_Cond], ([T].[Odds] * 2 + 2) AS AvgPay, (SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer]) AS Starts, (SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer] AND [TW].[Fin_Pos] = 1) AS Wins, (SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer] AND [TW].[Fin_Pos] = 2) AS Places, (SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer] AND [TW].[Fin_Pos] = 3) AS Shows, ROUND ((((SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer] AND [TW].[Fin_Pos] = 1) / (SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer])) * 100), 0) AS [Win Percentage], ROUND ((((SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer] AND [TW].[Fin_Pos] <= 2) / (SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer])) * 100), 0) AS [Win/Place Percentage], ROUND ((((SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer] AND [TW].[Fin_Pos] <= 3) / (SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer])) * 100), 0) AS [ITM Percentage]
FROM [Trainer Detail] AS T
WHERE ([T].Track_Cond IN ("fst", "gd", "tf", "fm"))
AND ([T].Odds BETWEEN 4.499 And 8.901)
AND (SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer] AND [TW].[Fin_Pos] <= 3) > 1
ORDER BY [T].[Fin_Pos];
Thanks guys
audrey
Is there any way I can make this PITA query faster? Can i break this down into more smaller queries??? do ANYTHING to it to make it run in less time??? ANY and ALLLLL ideas are SO appreciated, you have no idea, lol. Here it is:
SELECT [T].[ID], [T].[Trainer], [T].[Date], [T].[Horse], [T].[Race], [T].[Fin_Pos], [T].[Odds], [T].[RACECLASS], [T].[Race_Sbred], [T].[Race_Age], [T].[Track_Cond], ([T].[Odds] * 2 + 2) AS AvgPay, (SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer]) AS Starts, (SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer] AND [TW].[Fin_Pos] = 1) AS Wins, (SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer] AND [TW].[Fin_Pos] = 2) AS Places, (SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer] AND [TW].[Fin_Pos] = 3) AS Shows, ROUND ((((SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer] AND [TW].[Fin_Pos] = 1) / (SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer])) * 100), 0) AS [Win Percentage], ROUND ((((SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer] AND [TW].[Fin_Pos] <= 2) / (SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer])) * 100), 0) AS [Win/Place Percentage], ROUND ((((SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer] AND [TW].[Fin_Pos] <= 3) / (SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer])) * 100), 0) AS [ITM Percentage]
FROM [Trainer Detail] AS T
WHERE ([T].Track_Cond IN ("fst", "gd", "tf", "fm"))
AND ([T].Odds BETWEEN 4.499 And 8.901)
AND (SELECT COUNT([TW].[ID]) FROM [Trainer Detail] [TW] WHERE [TW].[ID] <> [T].[ID] AND [TW].[Date] BETWEEN ([T].[Date] - 1) AND ([T].[Date] - [DaysBack]) AND [TW].[Trainer] = [T].[Trainer] AND [TW].[Fin_Pos] <= 3) > 1
ORDER BY [T].[Fin_Pos];
Thanks guys
audrey