Oracle SQL Query Assistance - PullRequest
       3

Oracle SQL Query Assistance

0 голосов
/ 27 декабря 2011

Для данной таблицы:

ID NUMBER
OBJECTID NUMBER
CATEGORYID NUMBER
SCORE NUMBER
SCOREDATE DATE

Можно ли эффективно получить последний результат (на основе SCOREDATE) в каждой отдельной категории для данного объекта в одном запросе?

Ответы [ 2 ]

7 голосов
/ 27 декабря 2011

Попробуйте:

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
3 голосов
/ 27 декабря 2011

То, что вы хотите, попадает в тег [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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...