2014-10-06 3 views
0

У меня есть вопрос, например, я должен написать запрос sql, чтобы узнать людей, у которых были лучшие тайминги, по крайней мере, на 4 этапа (всего 21 этап), чем этот конкретный человек. Тайминги сохраняются в секундах. i.e мне нужно сравнить группу людей с таймингами конкретного человека и, если они быстрее, по крайней мере, на 4 этапа, тогда их имена будут отображаться.Mysql сравнение времени в секундах

+0

как вы определили тип столбца? –

+0

Этапы (stage_id, took_place, start_loc, end_loc, distance, description) – user1046793

+0

Всадники (rider_id, имя) Результаты (stage_id, rider_id, time_seconds) – user1046793

ответ

0

Я не знаю точную схему, поэтому я мог только основываться на том, что вы описали. Вот очень простой пример со схемой и запросом: http://sqlfiddle.com/#!2/717356/5

сам запрос должен выглядеть следующим образом:

select t.user_id, count(*) as better_stages from timings t 
join timings base on (base.stage = t.stage and not t.user_id = base.user_id) 
where base.user_id = 1 and base.timing > t.timing 
group by user_id 
having better_stages >= 4; 

Это вы должны быть в состоянии изменить, чтобы работать с вашей схемой. Присоединитесь к таблице пользователя или что-то еще нужно настроить.

+0

Этапы (stage_id, took_place, start_loc, end_loc, distance, description) Riders (rider_id, name) Результаты (stage_id, rider_id, time_seconds) это мои 3 отношения, как я могу использовать ваше заявление для своих отношений? – user1046793

+0

Это очень просто, вы просто присоединяетесь к Всадникам, если хотите показать имя гонщика. Вам не нужны таблицы этапов: выберите Riders.name, t.rider_id, count (*) as better_stages из результатов t join База результатов on (base.stage_id = t.stage_id, а не t.user_id = base. user_id) присоединиться к Всадникам на (t.rider_id = Riders.id) где base.rider_id = 1 и base.timing> t.timing группа от rider_id , имеющая better_stages> = 4; –

+0

спасибо за решение, которое оно сейчас работает – user1046793

Смежные вопросы