|
Модераторы: skyboy |
|
KateL |
|
||||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 9.8.2007 Где: Новосибирск Репутация: нет Всего: нет |
MS Access, C++ Builder
Есть две таблицы, каждой строке из Table_A может соответствовать несколько строк из Table_B по Table_A.ID = Table_B.A_ID Table_A с полями: ID, Year, ... Table_B с полями: ID, A_ID, N, Name, X, Y, ... Надо составить запрос, в котором из всех строк Table_B (для одного A_ID) выбирается одна строка с максимальным значением N (даже, если таких максимальных значений несколько) + условие по полям N, Yr, X и Y В результате должна получиться таблица: Yr, N_max, Name с сортировкой по N_max У меня получился такой запрос. Возможно, я там наворотила лишнего, т.к. плохо разбираюсь в сложных запросах.
Но! В случае, если максимальных значений N для одного A_ID несколько, все строки с ними выводятся в результате. А надо, чтобы для каждой строки Table_A в результате была только одна строка с максимальным значением N. Пример:
Помогите, пожалуйста Это сообщение отредактировал(а) KateL - 16.9.2020, 14:07 |
||||
|
|||||
Агрох |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 177 Регистрация: 6.4.2013 Где: Москва Репутация: нет Всего: 6 |
TOP 1
Но в таком виде возьмёт условно случайную строку. В разное время или на разных серверах один и тот же запрос над одними и теми же данными вернёт разные значения, что не есть хорошо. Лучше добавить ещё какую то сортировку, чтобы добиться однозначности. --------------------
Putin here, Putin there, Putin almost everywhere! |
|||
|
||||
KateL |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 9.8.2007 Где: Новосибирск Репутация: нет Всего: нет |
||||
|
||||
Akina |
|
||||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 453 |
А если в Table_B имеется две строки с одинаковым максимальным N - что выводить? А вообще
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
KateL |
|
||||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 9.8.2007 Где: Новосибирск Репутация: нет Всего: нет |
это не важно, главное значение N 1) JOIN заменила на INNER JOIN (а то ругался) 2) дальше тоже не проходит. Выдает ошибку: Ошибка синтаксиса (пропущен оператор) в выражении запроса 't1.ID = t2.A_ID INNER JOIN (SELECT t3.A_ID, MAX(t3.N) AS N FROM table_b t3 GROUP BY t3.A_ID) AS t4 ON t2.A_ID = t4.A_ID' 3) Вот так работает, но снова с дублями
|
||||
|
|||||
ksnk |
|
|||
прохожий Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: нет Всего: 386 |
У меня нет возможности проверить на msaccess :( так что я на MySql
http://sqlfiddle.com/#!9/131805/13 вот тут можно посмотреть. Вроде, то что надо. Но это только для случая, когда комбинация N+Name однозначно определяет строку таблицы Table_В. Если данные такие и есть, то вполне работоспособно, с точностью до версии sql для Access Это сообщение отредактировал(а) ksnk - 16.9.2020, 22:31 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 453 |
KateL, смотрим http://forum.vingrad.ru/index.php?showtopi...t&p=1879602 и делаем... а то пальцами в воздухе можно вертеть до бесконечности.
Сделал мин. модель. Вот как выглядит запрос по мнению MS Access 2010:
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Агрох |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 177 Регистрация: 6.4.2013 Где: Москва Репутация: нет Всего: 6 |
Писал на FB. В Access аналогом FIRST_VALUE, по моему, является просто FIRST.
Вариант без оконных функций:
Это сообщение отредактировал(а) Агрох - 17.9.2020, 10:38 --------------------
Putin here, Putin there, Putin almost everywhere! |
||||
|
|||||
KateL |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 9.8.2007 Где: Новосибирск Репутация: нет Всего: нет |
Спасибо за уделенное моему вопросу время. Но это совсем не то. В примере я написала Name как aaa1 aaa2 просто, чтобы как-то обозначить. Они вообще могут быть разные. Это как дополнительный комментарий к полю N Мне же надо в таблице Table_B для каждой группы по A_ID найти одно максимальное значение N и добавить к нему соответствующий Name (любой, если максимальных значений несколько) и Yr из Table_A |
|||
|
||||
KateL |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 9.8.2007 Где: Новосибирск Репутация: нет Всего: нет |
||||
|
||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |