-1
給定一個表:的Oracle SQL查詢援助
ID NUMBER
OBJECTID NUMBER
CATEGORYID NUMBER
SCORE NUMBER
SCOREDATE DATE
是否可以有效地檢索在每個不同類別的最後得分(基於SCOREDATE
),用於一個查詢給定的對象?
給定一個表:的Oracle SQL查詢援助
ID NUMBER
OBJECTID NUMBER
CATEGORYID NUMBER
SCORE NUMBER
SCOREDATE DATE
是否可以有效地檢索在每個不同類別的最後得分(基於SCOREDATE
),用於一個查詢給定的對象?
嘗試:
select v.* from (
select category_id,
score,
scoredate,
row_number() over (partition by category_id order by scoredate desc) rn
from MyTable) v
where rn=1
你想要的東西落入[greatest-n-per-group]
標籤。實現結果的一種方式:
SELECT
t.CategoryId
, t.Score
FROM
(SELECT
CategoryId
, MAX(ScoreDate) AS LastScoreDate
FROM
TableX
WHERE
ObjectId = @ObjectId
GROUP BY
CategoryId
) AS grp
JOIN
TableX AS t
ON grp.Category = t.CategoryId
AND grp.LastScoreDate = t.ScoreDate
WHERE
t.ObjectId = @ObjectId
是您的表索引?你到目前爲止是否有一個非高效的查詢? – 2011-12-27 17:34:36
我的表未編入索引。這可能是一種可能性,但我現在還不確定。我可以想象我可以用子查詢抽出一些東西,但它似乎並不比在我的應用程序邏輯中用許多查詢檢索數據更有效。 – smp7d 2011-12-27 17:37:41
這個問題爲什麼被低估?我不允許詢問建議的查詢技巧嗎? – smp7d 2012-01-18 17:00:13