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

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

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

Проблема в том, что места определяются для каждого клуба, и явно вводить в таблицу их не выйдет, подойдет если просто любой у кого третье место
...
Рейтинг: 0 / 0
19.05.2019, 21:55
    #39815133
Шаман
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос с групировкой
Prostofilya,
Только запросом в этой ситуации не обойтись.
Сегодня нет времени, а завтра сброшу примерчик.
...
Рейтинг: 0 / 0
19.05.2019, 22:36
    #39815141
alecko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос с групировкой
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
20.05.2019, 01:20
    #39815162
Шаман
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос с групировкой
Prostofilya,
В вашу базу добавил:
Таблицу Результат для записи результата выполнения запроса.
Отчет1 для отображения данных из таблицы Результат с фильтром занятых мест.
Функцию от vmag , которая собственно и является ядром всех вычислений.

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


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