2015-06-14 4 views
0

У меня есть 2 таблицы «викторины» & «пользователей», мне нужно вернуть список первого пользователя взяли каждый тест, с quiz_id:MySQL: возвращает первую строку из присоединиться

таблицы структуры

"quizzes" structure: 
id  name 
1  England 
2  france 
3  Japan 
4  USA 
5  UAE 
6  Sweden 
7  Italy 
8  Brazil 
9  South Korea 
10 India 


"users" structure: 
id user_id  quiz_id 
1  1   1 
2  1   2 
3  2   1 
4  3   4 
5  1   4 
6  5   9 
7  2   9 
8  3   8 
9  3   9 
10  3   7 

Мне нужно запустить запрос, чтобы вернуть первый "user_id" взяли каждый "викторины", (заказ по users.id ASC)

expected results: 
quiz_id  user_id 
    1   1 
    2   1 
    4   3 
    7   3 
    8   3 
    9   5 

спасибо,

+1

Регистрация на subqery с MIN (user_id) .... GROUP BY quiz_id – Mihai

+0

@Mihai пожалуйста, может u предоставить полный запрос? – mwafi

+0

Это классический [наибольший-на-группу] (http://stackoverflow.com/questions/7745609/sql-select-only-rows-with-max-value-on-a-column) (или наименее , в этом случае), из которых много существующих решений. –

ответ

1

Вы первая группа по quiz и выбрать минимальное id, а затем выбрать на основе этих ids:

select quiz_id, user_id 
from users 
where id in(select min(id) from users group by quiz_id) 
+0

thx, но есть ли способ выбрать их на основе «даты» ASC, а не «min (id)»? – mwafi

+0

Уверен, что вы можете это сделать. –

+0

@mwafi. , , Ваш вопрос здесь не упоминается о столбце даты. Если у вас есть другой вопрос, задайте его как другой вопрос, а не в комментарии. –

0
Select quiz_id, user_id 
    from users 
    Where (quiz_id, id) in 
     (
     Select quiz_id, min(id) id 
     From users 
      Group by quiz_id 
     ) 
+0

Пока вы фильтруете по id, фильтрация по викторине - просто накладные расходы. –