トップ 5 を使用して、いくつかの基準のトップ 5 を取得したいと思います。
データ スタイルは、月日、エリア 1、サブエリア 1、サブエリア 2 など、タイプ、各行の一意の識別子です。
私がやろうとしているのは、各月と地域の上位 5 つのタイプを見つけることです。
サンプルデータ:
Date Division Sub Division ID
31/05/2012 Sales 001
31/05/2012 Sales Call Centre 002
31/05/2012 Sales Call Centre 003
31/05/2012 Sales Store 004
31/05/2012 Marketing 005
31/05/2012 Marketing TV 006
30/04/2012 Sales 001
30/04/2012 Sales Call Centre 002
30/04/2012 Sales Call Centre 003
30/04/2012 Sales Store 004
30/04/2012 Marketing 005
30/04/2012 Marketing TV 006
等々。
私が求めている出力は次のとおりです。各月の部門レベルでのトップ 5 (サブ部門は考慮されません) 各月の各サブ部門レベルでのトップ 5
サンプル出力:
Date Top5Areas Volume
31/05/2012 Sales 100
31/05/2012 Marketing 90
31/05/2012 HR 50
30/04/2012 Sales 100
30/04/2012 Marketing 90
30/04/2012 HR 50
そして、レベルに応じて、それぞれのエリアのサブディビジョン:
Date Top5Areas Volume
31/05/2012 Call Centre 100
31/05/2012 Store 90
31/05/2012 HR 50
ただし、各グループに 5 を使用します。
これを行う方法はわかりません。多くのクエリを実行して結果を構築する必要があるかどうか、またはより良い方法があるかどうか疑問に思います。
事前に感謝し、あなたの提案に感謝します.
SELECT [TableA].[DisplayVar] AS DisplayVar, [TableB].[Date] AS MonthDate, TableC. [Divison] AS Divison, Volume
FROM (SELECT [TableA].[DisplayVar],
[TableB].[Date],
TableC.[Divison],
Volume
( SELECT COUNT() + 1
FROM ( SELECT [TableA].[DisplayVar], [TableB].[Date], TableC.[Divison], COUNT() AS Volume
FROM ([TableA] INNER JOIN [TableB] ON [TableA].[ID] = [TableB].[ID]) LEFT JOIN TableC ON [TableB].ID = TableC.Descriptor
GROUP BY [TableA].[DisplayVar], [TableB].[Date], TableC.[Divison]
) AS T
WHERE T.[TableB].[Date] = Data.[TableB].[Date]
AND T.Volume > Data.Volume
) AS Rank
FROM ( SELECT [TableA].[DisplayVar], [TableB].[Date], TableC.[Divison], COUNT(*) AS Volume
FROM ([TableA] INNER JOIN [TableB] ON [TableA].[ID] = [TableB].[ID]) LEFT JOIN TableC ON [TableB].ID = TableC.Descriptor
WHERE [TableB].[Date] BETWEEN Date() AND DateADD("m", -12, Date())
GROUP BY[TableA].[DisplayVar], [TableB].[Date], TableC.[Divison]
) AS DATA
) AS Data
WHERE (((Data.Rank)<=5))
ORDER BY [TableB].[Date] DESC , Volume DESC;