powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / SQL запрос с групировкой
14 сообщений из 14, страница 1 из 1
SQL запрос с групировкой
    #39815103
Prostofilya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста составить запрос, я пробовала разными способами, но не вышло.
Вот схема данных

Вот что нужно получить

нужно при этом первых три игрока каждого клуба.
Буду благодарна за помощь.
...
Рейтинг: 0 / 0
SQL запрос с групировкой
    #39815111
Шаман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Prostofilya,
1. Желательно приложить базу данных с клубами, фамилиями и результатом соревнования.
2. В таблице Соревнование нет поля занятого места. Соответственно, как отбирать победителей?
3. Вероятно номер места расчетный, исходя из результата время (сек)?
4. Какова роль таблицы Дистанция (поле Зачетное время)?
...
Рейтинг: 0 / 0
SQL запрос с групировкой
    #39815113
Prostofilya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, номер места расчетный, зачетное время предполагает максимальное зачетное время.
...
Рейтинг: 0 / 0
SQL запрос с групировкой
    #39815116
Фотография Tarasios
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProstofilyaДа, номер места расчетный, зачетное время предполагает максимальное зачетное время.
Может, всё таки - МИНИМАЛЬНОЕ зачётное время?
...
Рейтинг: 0 / 0
SQL запрос с групировкой
    #39815118
Prostofilya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну т.к. улучшение результата = уменьшение времени, то зачетное время - максимальное.
...
Рейтинг: 0 / 0
SQL запрос с групировкой
    #39815120
Шаман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Prostofilya,
А если время будет одинаковое по участникам из одного клуба?
С 1 и 2 местами понятно, но вот кого автоматом добавить на 3 место и исключить из запроса?
Похоже придется добавить поле место и заполнять его вручную.
...
Рейтинг: 0 / 0
SQL запрос с групировкой
    #39815121
Prostofilya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
думаю можно всех у кого третье место вывести
...
Рейтинг: 0 / 0
SQL запрос с групировкой
    #39815130
Шаман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Prostofilyaдумаю можно всех у кого третье место вывестиНет. Противоречит условию отбора 3 участников. Без ручного ввода места не обойтись.
...
Рейтинг: 0 / 0
SQL запрос с групировкой
    #39815131
Prostofilya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Шаман,

Проблема в том, что места определяются для каждого клуба, и явно вводить в таблицу их не выйдет, подойдет если просто любой у кого третье место
...
Рейтинг: 0 / 0
SQL запрос с групировкой
    #39815133
Шаман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Prostofilya,
Только запросом в этой ситуации не обойтись.
Сегодня нет времени, а завтра сброшу примерчик.
...
Рейтинг: 0 / 0
SQL запрос с групировкой
    #39815141
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Prostofilya,
а просто union собрать по клубам не подходит?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
SELECT top 3  u.[Код учасника], s.[Время (сек)], k.Клуб 
FROM Соревнование AS s INNER JOIN (Клуб AS k INNER JOIN Учасник AS u ON k.[Код клуба] = u.Клуб) ON s.[Код учасника] = u.[Код учасника]
WHERE (((k.[Код клуба])=1))
union
SELECT  top 3  u1.[Код учасника], s1.[Время (сек)], k1.клуб
FROM Соревнование AS s1 INNER JOIN (Клуб AS k1 INNER JOIN Учасник AS u1 ON k1.[Код клуба] = u1.Клуб) ON s1.[Код учасника] = u1.[Код учасника]
WHERE (((k1.[Код клуба])=2))
union
SELECT top 3  u2.[Код учасника], s2.[Время (сек)], k2.клуб
FROM Соревнование AS s2 INNER JOIN (Клуб AS k2 INNER JOIN Учасник AS u2 ON k2.[Код клуба] = u2.Клуб) ON s2.[Код учасника] = u2.[Код учасника]
WHERE (((k2.[Код клуба])=3))
ORDER BY k.Клуб, s.[Время (сек)];
' собираем этот запрос таким способом
dim str$, s$
s =vbnullstring: str =vbnullstring
for i=1 to 3' сколько клубов
str=str & s & "SELECT top 3  u" & i & " .[Код учасника], s" & i & ".[Время (сек)], k" & i & ".Клуб  " & _
"FROM Соревнование AS s" & i & " INNER JOIN (Клуб AS k" & i & " INNER JOIN Учасник AS u" & i & " ON k" & i & ".[Код клуба] = u" & i & ".Клуб) ON s"  & i & _
 ".[Код учасника] = u" & i & ".[Код учасника]
WHERE (((k" & i & ".[Код клуба])=" & i & "))
s= vbcrlf & " UNION " & vbcrlf
next
str=str & "ORDER BY k.Клуб, s.[Время (сек)];"
' ну и уж "открою запрос"

dim MyQueryDef As QueryDef, cName
cName="Klubs
On Error Resume Next
Currentdb.QueryDefs.Delete cName ' если ранее созданный есть удалим - и вообще надо удалять такие запросы - также нужно учесть рост из-за них размера базы.
Set MyQueryDef = Currentdb.CreateQueryDef(cName, str)
Currentdb.MyQueryDef.Refresh
DoCmd.OpenQuery cName, acViewNormal

...
Рейтинг: 0 / 0
SQL запрос с групировкой
    #39815162
Шаман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Prostofilya,
В вашу базу добавил:
Таблицу Результат для записи результата выполнения запроса.
Отчет1 для отображения данных из таблицы Результат с фильтром занятых мест.
Функцию от vmag , которая собственно и является ядром всех вычислений.

В форме Соревнование добавлена кнопка Печать , при нажатии которой сначала очищается таблица Результат, затем выполняется запрос на добавление в неё расчета занятых мест, и после этого открывается требуемый отчет.
...
Рейтинг: 0 / 0
SQL запрос с групировкой
    #39815167
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю другую схему
Единственное что придется-почитать HELP про нумерацию записей(в отчете попроще чем в запросе) и продумать момент если временаФ одинаковы(порядок сортировки-может добавить в неё какое-либо поле из данных-например возраст или что другое-сами решайте)
...
Рейтинг: 0 / 0
SQL запрос с групировкой
    #39815199
Шаман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вариант с учетом норматива.
Сидоров пробежал 100 метровку за 21 сек и не попадает в список победителей.
Для удобства редактирования вывел запрос из кода (Запрос1)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / SQL запрос с групировкой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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