0
我有以下查詢:優化SQL子查詢的最大價值
SELECT dlp.ParamID ParamID, dp.ParamName ParamName, dlp.LocID LocationID, ml.LocName LocationName , di.Entered_On DateEntered, dlp.FreqDays Frequency
FROM data_LocParams dlp
INNER JOIN data_Input di on dlp.LocID = di.LocID
INNER JOIN data_Parameters dp on dp.ParamID = di.ParamID
INNER JOIN map_Locations ml on ml.LocId = dlp.LocId
WHERE ((dlp.FreqDays IS NOT NULL) AND di.Entered_On < (GETUTCDATE() - dlp.FreqDays))
AND
di.Entered_On = (select max(Entered_On) from data_Input where LocId = dlp.LocID
and ParamId = dlp.ParamID)
我需要如何優化這個查詢援助。瓶頸似乎與followng:
di.Entered_On = (select max(Entered_On) from data_Input where LocId = dlp.LocID
and ParamId = dlp.ParamID)
注意,對於一個給定的Enter_On,我需要根據LOCID和芳族聚酰胺的最大Entered_On日期。
我嘗試以下,但沒有得到預期的結果:
SELECT * FROM
(
SELECT dlp.ParamID ParamID, dp.ParamName ParamName, dlp.LocID LocationID, ml.LocName LocationName, di.Entered_On DateEntered, dlp.FreqDays Frequency,
ROW_NUMBER() OVER (PARTITION BY dlp.LocId, dlp.ParamID
ORDER BY di.Entered_On DESC)
as RowNum
FROM data_LocParams dlp
INNER JOIN data_Input di on dlp.LocID = di.LocID
INNER JOIN data_Parameters dp on dp.ParamID = di.ParamID
INNER JOIN map_Locations ml on ml.LocId = dlp.LocId
WHERE dlp.FreqDays IS NOT NULL
) as a WHERE a.RowNum = 1 and DateEntered < (GETUTCDATE() - Frequency)