![](/img/trans.png)
[英]MS Access 2010 SQL Top N query by group performance issue (continued2)
[英]MS Access 2010 SQL Top N query by group performance issue
我有2個表,一個表用於衡量項目(MASE_Table),另一個表用於衡量項目屬性(SKU)。 項目屬性可以是Planner或ABCByPick或XYZ或其他屬性。
通過查詢,我想通過屬性ABCByPick獲取此度量的前10個項目(AvgOfScaledError)。
我想使查詢盡可能通用,以便可以復制查詢並用屬性計划器替換ABCByPick
我在這里嘗試了一些技巧。 只要MASE_Table中的記錄數少於1000,我就可以執行查詢。 如果我想使用MASE_Table中的8000條記錄來運行它,查詢將不再產生結果(沒有錯誤消息,但是超時)。
這是我查詢ABCByPick的前10名:
SELECT s2.ABCByPick
,m2.DmdUnit
,ROUND(m2.AvgOfScaledError, 2) AS MASE
FROM MASE_Table AS m2
INNER JOIN SKU AS s2
ON ( m2.Loc = s2.Loc )
AND ( m2.DmdUnit = s2.Item )
WHERE m2.AvgOfScaledError IN ( SELECT TOP 10 m1.AvgOfScaledError
FROM (
SELECT m1.Loc
,m1.DmdUnit
,s1.ABCByPick
,m1.AvgOfScaledError
FROM MASE_Table AS m1
INNER JOIN SKU AS s1
ON m1.Loc = s1.Loc
AND m1.DmdUnit = s1.Item
)
WHERE s1.ABCByPick = s2.ABCByPick
ORDER BY m1.AvgOfScaledError DESC )
ORDER BY s2.ABCByPick
,m2.AvgOfScaledError DESC;
MASE_Table上的主鍵是Loc和DmdUnit
SKU上的主鍵是Loc和Item
這應該可以幫助一些:
SELECT s2.ABCByPick,
m2.DmdUnit,
ROUND(m2.AvgOfScaledError, 2) AS MASE
FROM MASE_Table AS m2
INNER JOIN SKU AS s2 ON m2.Loc = s2.Loc
AND m2.DmdUnit = s2.Item
WHERE m2.AvgOfScaledError IN (
SELECT TOP 10 m1.AvgOfScaledError
FROM MASE_Table AS m1
INNER JOIN SKU AS s1 ON m1.Loc = s1.Loc
AND m1.DmdUnit = s1.Item
WHERE s1.ABCByPick = s2.ABCByPick
ORDER BY m1.AvgOfScaledError DESC
)
ORDER BY s2.ABCByPick,
m2.AvgOfScaledError DESC;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.