2 つのデータベースがあります。1 つはリビジョン番号と日付を含むサブバージョン ログで、もう 1 つはリビジョン中に変更されたリビジョン番号とパスを含みます。私のクエリは、月ごとに最もコミットされているディレクトリを見つけます。問題は、実行に数分かかることです。この獣のようなクエリを最適化するのを手伝ってくれる人はいますか? もっと良い方法があると確信しています。
SELECT [Directory]
,[Month]
,COUNT([PathMonth]) OVER (PARTITION BY [PathMonth]) AS [Count] INTO ##temp
FROM
(SELECT [Path]
,[Month]
,[Directory]
,[Directory] + [Month] AS [PathMonth]
FROM
(SELECT [Path]
,SUBSTRING([Path], 0, LEN([Path]) - CHARINDEX('/', REVERSE([Path])) + 1) AS [Directory]
,CONVERT(CHAR(4), [LogDate], 120) + '-' + CONVERT(CHAR(2), [LogDate], 110) AS [Month]
FROM [SubversionLog] JOIN [PathsLog] ON [SubversionLog].[Revision] = [PathsLog].[Revision]
WHERE [Path] LIKE '/%/%/%/_%'
) one) two
ORDER BY [Month]
SELECT * INTO ##tempTwo
FROM ##temp
GROUP BY [Directory], [Month], [Count]
SELECT t1.[Directory]
,t1.[Month]
,t1.[Count]
FROM ##tempTwo t1 LEFT JOIN ##tempTwo t2 ON t1.[Month] = t2.[Month] AND t1.[Count] < t2.[Count]
WHERE t2.[Count] IS NULL
GROUP BY t1.[Directory], t1.[Month], t1.[Count]
ORDER BY [Month] DESC
IF EXISTS (SELECT * FROM ##temp)
DROP TABLE ##temp
IF EXISTS (SELECT * FROM ##tempTwo)
DROP TABLE ##tempTwo
この作業の半分は、YYYY-MM-DD HH:MM:SS.SSS タイムスタンプを YYYY-MM にフォーマットし、ファイル名パスをディレクトリに変換することです。