Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 04.08.2018
Сообщений: 9

Поиск максимальных значений по критерию из другого столбца

04.08.2018, 14:17. Показов 2254. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, прошу помощи в задаче. Есть поле BCCH которое циклично. Надо в рамках одного цикла (количество записей в цикле не постоянно, критерий цикла последущий элемент меньше предыдущего) найти максимум в поле Rxlev и записать в другую таблицу или сформировать запросом. (при этом значение поля EQPT=2). В итоге должен получится список максимальных элементов из данных циклов.
Вложения
Тип файла: zip таблица.zip (104.1 Кб, 4 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.08.2018, 14:17
Ответы с готовыми решениями:

Количество значений по уникальности другого столбца
Добрый день, Подскажите, пжл, как можно выполнить такую задачу: Есть данные А 1 А 0 А 2 В 0 В 2 С 0

Поиск и выделение значений в столбце по значению ячейки другого столбца
Всем доброго времени! Помогите пожалуйста! Есть такая задача: нужно по значению ячейки выделить совпадения в другом столбце и вывести...

Ограничение значений для столбца множеством значений из другого столбца другой таблицы
Добрый. Не могу нагуглить, допустим есть 2 таблицы: t1 и t2 В t1, допустим, кроме всего прочего есть поле: `name` VARCHAR (250) UNICUE...

16
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
04.08.2018, 16:33
Как вариант - запрос
SQL
1
2
3
4
SELECT BCCH, MAX(RxLev) AS Max_RxLev
FROM таблица
WHERE EQPT=2
GROUP BY BCCH;
0
0 / 0 / 0
Регистрация: 04.08.2018
Сообщений: 9
04.08.2018, 17:50  [ТС]
Немного другое я спрашивал. К примеру первые значения максимального RxLev 1 = Max(RxLev) при BCCH(91-734) RxLev 2 = Max(RxLev) при BCCH(89-735) и т.д. А предложенном запросе просто максимум по RxLev по каналам BCCH то-есть BCCH 89 RxLev -52.7 BCCH 90 RxLev -55.5 и т.д. (BCCH n+1 RxLev x)
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
04.08.2018, 18:14
Цитата Сообщение от Stlyar Посмотреть сообщение
при BCCH(91-734)
И где эти загадочные BCCH(91-734) искать. В таблице этого нет. На мифические циклы не ссылайтесь. Есть только таблица с данными.
1
0 / 0 / 0
Регистрация: 04.08.2018
Сообщений: 9
04.08.2018, 18:22  [ТС]
Я имел в виду что первое подмножество это значения BCCH в диапазоне 91-734 (первых 20 строк), далее подмножество BCCH в диапазоне 89-735 (следующие 23 строки) и т.д. (количество строк может меняться, значения в поле BCCH идут не подряд и могут принимать от 1 до 1021) вот в внутри этих подмножествах надо найти максимумы. Я про циклы зря сказал.
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
04.08.2018, 18:28
И как эти загадочные диапазоны задаются (да и количества строк тоже)? И то, что диапазоны 91-734 и 89-735 пересекаются Вас не смущает? В общем, делайте таблицу ожидаемых результатов с комментариями, угадайки больше не будет.

Не по теме:

Таблицы в базе должны быть "правильными" - таблица без ключевого поля, без индексов и всеми необязательными полями в базе - это нонсенс

0
0 / 0 / 0
Регистрация: 04.08.2018
Сообщений: 9
04.08.2018, 18:53  [ТС]
Прошу прощения за косноязычность. Вот таблица, где результирующие строки выделены зелёным. поддиапазоны явно не задаются. Единственный их признак это переход к меньшему значению. БД сформирована автоматически. Если для решения требуется ключевое поле ввести, это возможно.
Вложения
Тип файла: zip таблица.zip (59.6 Кб, 3 просмотров)
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
04.08.2018, 20:07
Лучший ответ Сообщение было отмечено Stlyar как решение

Решение

Stlyar, смотрите вложение. Таблица tbl это та же таблица, но со счетчиком. Причем записи были отсортированы по дате и времени. На основе tbl запрос Calc. Выполняется не быстро. На моем ПК где-то секунд 40.
SQL
1
2
3
4
5
6
7
8
9
SELECT f.id1+1 AS id1, f.id2, MAX(RxLev) AS mx
FROM tbl INNER JOIN (SELECT t1.id1, MIN(t2.id1) AS id2
   FROM (SELECT z1.id AS id1, z1.BCCH AS b1, z2.id AS id2, z2.BCCH AS b2 FROM tbl AS z1 
   INNER JOIN tbl AS z2 ON z1.id=z2.id-1 WHERE z1.bcch>z2.bcch)  AS t1 
   INNER JOIN (SELECT z1.id AS id1, z1.BCCH AS b1, z2.id AS id2, z2.BCCH AS b2 FROM tbl AS z1 
   INNER JOIN tbl AS z2 ON z1.id=z2.id-1 WHERE z1.bcch>z2.bcch)  AS t2 ON t1.id1<t2.id1
   GROUP BY t1.id1) AS f 
ON tbl.id BETWEEN f.id1+1 AND f.id2
GROUP BY f.id1, f.id2
Самый первый период не считает. Надо еще возиться. Проще вручную добавить
Вложения
Тип файла: rar таблица.rar (162.5 Кб, 2 просмотров)
1
0 / 0 / 0
Регистрация: 04.08.2018
Сообщений: 9
04.08.2018, 23:04  [ТС]
mobile, подскажи плз еще как вытащить еще данные из полей X и Y.

Добавлено через 28 минут
и ещё вопрос при копировании запроса выдаётся ошибка о том что после оператора BETWEEN нету оператора AND. Почему так может быть?
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
04.08.2018, 23:52
Цитата Сообщение от Stlyar Посмотреть сообщение
как вытащить еще данные из полей X и Y
SQL
1
2
3
SELECT tbl.*
FROM tbl INNER JOIN calc ON (tbl.id BETWEEN calc.id1 AND calc.id2)
WHERE tbl.RxLev=calc.mx
Цитата Сообщение от Stlyar Посмотреть сообщение
при копировании запроса выдаётся ошибка о том что после оператора BETWEEN нету оператора AND. Почему так может быть?
Предположу, что в операции связи в джойнах нет круглых скобок. Access для всех связей хоть на миллиметр выше примитивного уровня требует скобки. Смотрите пример в этом же посте
0
0 / 0 / 0
Регистрация: 04.08.2018
Сообщений: 9
04.08.2018, 23:59  [ТС]
у меня стоит Access 2010

Добавлено через 6 минут
В примере Access тоже выдаёт ошибку.
То-есть полный запрос выглядит так:

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT f.id1+1 AS id1, f.id2, MAX(RxLev) AS mx
FROM tbl INNER JOIN (SELECT t1.id1, MIN(t2.id1) AS id2
   FROM (SELECT z1.id AS id1, z1.BCCH AS b1, z2.id AS id2, z2.BCCH AS b2 FROM tbl AS z1 
   INNER JOIN tbl AS z2 ON z1.id=z2.id-1 WHERE z1.bcch>z2.bcch)  AS t1 
   INNER JOIN (SELECT z1.id AS id1, z1.BCCH AS b1, z2.id AS id2, z2.BCCH AS b2 FROM tbl AS z1 
   INNER JOIN tbl AS z2 ON z1.id=z2.id-1 WHERE z1.bcch>z2.bcch)  AS t2 ON t1.id1<t2.id1
   GROUP BY t1.id1) AS f 
ON tbl.id BETWEEN f.id1+1 AND f.id2
GROUP BY f.id1, f.id2
 
SELECT tbl.*
FROM tbl INNER JOIN calc ON (tbl.id BETWEEN calc.id1 AND calc.id2)
WHERE tbl.RxLev=calc.mx
?
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
05.08.2018, 00:08
Ну ведь только что написал, что в соединении Join параметры должны быть в скобках. Предпоследняя строка в первом запросе (Calc)
ON (tbl.id BETWEEN f.id1+1 AND f.id2) 
0
0 / 0 / 0
Регистрация: 04.08.2018
Сообщений: 9
05.08.2018, 00:35  [ТС]
Теперь и на второй запрос ругается, что нету And после BETWEEN
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
05.08.2018, 10:45
Цитата Сообщение от Stlyar Посмотреть сообщение
Теперь и на второй запрос ругается, что нету And после BETWEEN
Да, действительно при сохранении запроса акс непонятно почему выкидывает круглые скобки из соединения. Пришлось иннер джойн переделать на Where. Смотрите запрос Calc, CalcFinal.

Но я подумал, что такие задачи скорее курсорного типа и в ВБА должны быстрей пройти. И действительно, процедура findmax из Module1 записывает расчеты за секунду во вспомогательную таблицу Result.
Вложения
Тип файла: rar таблица.rar (171.2 Кб, 2 просмотров)
0
0 / 0 / 0
Регистрация: 04.08.2018
Сообщений: 9
05.08.2018, 12:04  [ТС]
Да, действительно быстрее, только алгоритм не учитывает значения, если они находятся по краям определённых областей. то-есть строки с которых начинается (и заканчивается) промежуток поиска максимального элемента. Он их почему-то игнорирует, хотя там есть значения максимальные.
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
05.08.2018, 17:38
Лучший ответ Сообщение было отмечено Stlyar как решение

Решение

Поправлено
Visual Basic
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
33
34
35
36
37
38
39
Sub findmax()
    Dim db As DAO.Database, rRes As DAO.Recordset, rF As DAO.Recordset, rTbl As DAO.Recordset
    Dim s, b0, id, i, mx
    
    Set db = CurrentDb
    Set rTbl = db.OpenRecordset("select * from tbl where EQPT=2")
    Set rF = db.OpenRecordset("select * from tbl where EQPT=2")
    db.Execute "delete * from result" 'Очистить таблицу
    Set rRes = db.OpenRecordset("select * from result")
    
    b0 = 0 ' 9999999
    mx = rTbl!RxLev
    id = rTbl!id
    Do Until rTbl.EOF
        If rTbl!BCCH < b0 Then
            b0 = rTbl!BCCH '0
            mx = rTbl!RxLev 'mx = -9999999
            rRes.AddNew
            rF.FindFirst "id=" & id
            If Not rF.NoMatch Then
                For i = 0 To rF.Fields.Count - 1
                    rRes(i) = rF(i)
                Next
                rRes.Update
            End If
            id = rTbl!id
        Else
            If mx < rTbl!RxLev Then
                id = rTbl!id
                mx = rTbl!RxLev
            End If
            b0 = rTbl!BCCH
        End If
        
        
        rTbl.MoveNext
    Loop
 
End Sub
2
0 / 0 / 0
Регистрация: 04.08.2018
Сообщений: 9
05.08.2018, 18:37  [ТС]
Благодарю. Это намного больше чем я рассчитывал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.08.2018, 18:37
Помогаю со студенческими работами здесь

Перенос значений из столбца в нужные ячейки - на основании данных другого столбца
Всем здравствуйте. Столкнулся с проблемой переноса данных из одного столбца, по критерию заполненности другого столбца. На Листе3 -...

Вывод значений столбца, которые не равны значениям другого столбца
Необходимо вывести строки табл.1 со столбцами &quot;А&quot;,&quot;Б&quot;,&quot;В&quot; с условием, что значения столбца &quot;В&quot; не равны значениям столбца...

Поиск последних пяти значений по определенному критерию
Как сделать чтобы автоматически заполнялась таблица H3:M16 из исходных данных Последний - значит поиск последнего исхода для...

Создать одномерный массив из максимальных значений каждого столбца матрицы с нечетным индексом
Дана матрица C(N, M). Создать одномерный массив из максимальных зна- чений каждого столбца матрицы с нечетным индексом.

Поиск максимальных и минимальных значений
Добрый день! Прошу помочь с решением поставленной жене задачки!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru