2011-11-14 2 views
0

Я все еще разбираюсь в основах sql. Любая помощь очень ценится.SQL-запрос помощи

Стол TeamRankings. Колонны следующие:

score | qualities_id | team_id | year | source_id 

Команды оцениваются по различным качествам за определенные годы. Обратите внимание, что данной команде может быть присвоено несколько баллов (каждый из них будет из другого источника). Аналогичным образом, у данной команды могут не быть никаких баллов за данный год.

Вот проблема:

однократный качества, список команд, а также список лет, я хочу, чтобы найти один балл для каждой команды/года. В случае, если у данной команды/года есть баллы, доступные из нескольких источников, я бы хотел выбрать счет с самым низким исходным кодом.

Я предполагаю, что способ сделать это - GROUP BY team_id, year, quality_id, а затем как-то отфильтровать идентификаторы более высокого источника. Но я смущен, когда происходит такая фильтрация. Это не в статье HAVING, или в предложении WHERE, правильно? Мне нужен подзапрос?

ответ

3

Вы можете присоединиться к сгруппированной версии таблицы:

select t.* from TeamRankings t 
inner join (select team_id, year, min(source_id) as minSource 
      from TeamRankings group by team_id, year) f 
on t.team_id = f.team_id AND t.year = f.year AND t.source_id = f.minSource 
0
SELECT score, team_id, year, min(source_id) 
FROM TeamRankings 
GROUP BY score, team_id, year 
WHERE qualities_id=1 
Смежные вопросы