powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите решить проблему с выборкой MIN()
3 сообщений из 3, страница 1 из 1
Помогите решить проблему с выборкой MIN()
    #32843790
Fyn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Fyn
Гость
Помогите решить одну проблемку...
Может я уже совсем к концу года заработался, но суть такая:

Есть 4 таблицы:

Events - событие (соревнования),
Members - участники,
BarCode - карточки участника,
Runs - результаты участника

Каждая запись в таблице результатов содержит время по 4-м участкам и общий результат (сумма по 4-м участкам). У каждого участника много различных результатов.

Необходимо Выбрать минимальный общий результат по каждому участнику.
Пишу запрос:

автор
SELECT Members.ID, CONCAT_WS(' ', Members.Name, Members.Surname) as Name, Events.Name as Ename, Runs.RunDate, Runs.ReactionTime, Runs.ForwardTime, Runs.TurnTime, Runs.BackTime, MIN(Runs.TotalTime) as TotalTime
FROM Runs, Events, BarCode, Members
WHERE Runs.EventID = Events.Nr AND Runs.MemberId = BarCode.BarNumber AND BarCode.MemberId = Members.ID AND Runs.ForwardTime > 0 AND Runs.BackTime > 0 AND Runs.TurnTime > 0 AND Runs.ReactionTime > 0
GROUP BY ID
ORDER BY TotalTime
LIMIT 0,20

Он мне выдаёт результаты первого вхождения по 4-м участкам и минимальный общий результат:

Код: plaintext
1.
2.
... | ReactionTime | ForwardTime | TurnTime | BackTime | TotalTime
... |        2       |        2      |      2     |      2     |     6 

Запрос:
автор
SELECT Members.ID, CONCAT_WS(' ', Members.Name, Members.Surname) as Name, Events.Name as Ename, Runs.RunDate, Runs.ReactionTime, Runs.ForwardTime, Runs.TurnTime, Runs.BackTime, Runs.TotalTime
FROM Runs, Events, BarCode, Members
WHERE Runs.EventID = Events.Nr AND Runs.MemberId = BarCode.BarNumber AND BarCode.MemberId = Members.ID AND Runs.ForwardTime > 0 AND Runs.BackTime > 0 AND Runs.TurnTime > 0 AND Runs.ReactionTime > 0
GROUP BY ID
ORDER BY TotalTime
LIMIT 0,20

Возвращает результат
Код: plaintext
1.
2.
... | ReactionTime | ForwardTime | TurnTime | BackTime | TotalTime
... |        2       |        2      |      2     |      2     |     8 

В то время как нужны результаты по минимальному TotalTime
Код: plaintext
1.
2.
... | ReactionTime | ForwardTime | TurnTime | BackTime | TotalTime
... |        1       |        1      |      2     |      2     |     6 

Как его получить???
...
Рейтинг: 0 / 0
Помогите решить проблему с выборкой MIN()
    #32844414
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В такой ситуации надо сначало определить по полю ID и TotalTime (я так понимаю оно отвечает за "минимальный общий результат") запись которую надо вывести для этого пользователя.

Затем снова объединить полученную таблицу с Runs, но уже вытащить записи в которых ID и TotalTime равен полученным в предыдущем запросе!

Код: plaintext
mahoune
...
Рейтинг: 0 / 0
Помогите решить проблему с выборкой MIN()
    #32847710
Fyn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Fyn
Гость
Спасибо.
Я тоже так же решил эту проблему.
Первым запросом выбрал ID и TotalTime, а потом полученный результат использовал во втором...
Ещё раз спасибо...
:-)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите решить проблему с выборкой MIN()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]