Oracle SQL查询帮助

时间:2011-12-27 17:30:25

标签: sql oracle oracle10g

给出一张表:

ID NUMBER
OBJECTID NUMBER
CATEGORYID NUMBER
SCORE NUMBER
SCOREDATE DATE

是否可以在一个查询中有效地检索给定对象的每个不同类别中的最后得分(基于SCOREDATE)?

2 个答案:

答案 0 :(得分:7)

尝试:

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

答案 1 :(得分:3)

您想要的内容属于[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