powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Max БД
17 сообщений из 17, страница 1 из 1
Max БД
    #32856190
BossXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос в следуещем:
Как можно найти 3 самых больших числа в столбце и закинуть их в массив?
Можно это сделать без SQL запросов? И как с SQL?
Заранее спасибо.
...
Рейтинг: 0 / 0
Max БД
    #32856206
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проще всего - открыть рекордсет в SQL которого стоит ORDER BY ... DESC
...
Рейтинг: 0 / 0
Max БД
    #32856227
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT TOP 3 my_field FROM my_table ORDER BY my_field
...
Рейтинг: 0 / 0
Max БД
    #32856257
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LepsikSELECT TOP 3 my_field FROM my_table ORDER BY my_field DESC
...
Рейтинг: 0 / 0
Max БД
    #32856442
BossXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А без помощи SQL как вывести?
...
Рейтинг: 0 / 0
Max БД
    #32856457
Фотография Green2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы вручную сделать это, надо переписать
SELECT TOP 3 my_field FROM my_table ORDER BY my_field DESC
на бейсике
--

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Max БД
    #32856484
BossXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Green2, посмотри сообщение выше...
...
Рейтинг: 0 / 0
Max БД
    #32856662
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если числа в поле не сортированы, то проще сначала закинуть все в массив, отсортировать и взять первые 3 :). Для сортировки рекомендую использовать алгоритм Quick Sort, хотя более точно можно подобрать только зная специфику предполагаемог онабора данных.


Если же охота поизвращатся и провернуть это все прямо в рекорсете то можно че нить придумать...
Например так:
Написать небольшую функцию, вызывать ее рекурсивно накладывая фильтр на поле и проверяя количество значений пока оно не будет равно 3. Значение фильтра подбирать в зависимости от предыдущего результата динамически.
Т.е. взяли 10 - получили 120 чисел, 20 - 60 чисел, 30 - 10 чисел, 40 - 0 чисел, 35 - 5 чисел, 34 - 3 числа. Расчет окончен :).


Magnus
...
Рейтинг: 0 / 0
Max БД
    #32856725
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы не уточнили откуда столбец.
Если из рекордсета, то:
Код: plaintext
1.
2.
3.
4.
dim rs as adodb.recordset
set rs = rsИсточник.Clone
rs.sort = "НужноеПоле DESC"
'Теперь берем первые 3 из rs
set rs = nothing
Но это если провайдер позволяет Sort.
Например, внутри Access, ADO рекордсеты не сортируются и тогда не знаю как - ч/з массив наверно.
...
Рейтинг: 0 / 0
Max БД
    #32857644
BossXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Magnus23, числа в БД не отсортированы, но я их сортирую при загрузке формы:
Data1.RecordSource = "SELECT * FROM Данные ORDER BY [Группа] ASC"
воть, тут то мне и надо определить наибольшее число в СТОЛБЦЕ, потом найти 2 MAX число и 3...
Впринципе можно их закинуть в переменную например MaxChislo(2), так даже будет лучше...
...
Рейтинг: 0 / 0
Max БД
    #32857673
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может вы не поняли.
если Data1 - это Adodc то:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Set rs = Me.Data1.Recordset.Clone  'Если Data1 не привязан к контролу здесь будет ошибка
rs.Sort = "Поле1 DESC"
'Сами данные в Data1 - Остаются со старой сортировкой
Dim i As Long
Do Until rs.EOF
  If i >  2  Then Exit Do
  MsgBox rs.Fields("Поле1")
  rs.MoveNext
  i = i +  1 
Loop
Set rs = Nothing
...
Рейтинг: 0 / 0
Max БД
    #32857683
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BossXPMagnus23, числа в БД не отсортированы, но я их сортирую при загрузке формы:
Data1.RecordSource = "SELECT * FROM Данные ORDER BY [Группа] ASC"
воть, тут то мне и надо определить наибольшее число в СТОЛБЦЕ, потом найти 2 MAX число и 3...
Впринципе можно их закинуть в переменную например MaxChislo(2), так даже будет лучше...

В таком случае чем тебе не подходит первый вариант? Возьми 3 числа снизу, они и будут самыми большими.
...
Рейтинг: 0 / 0
Max БД
    #32857915
BossXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Magnus23, как можно взять последние 3 числа в столбце и их значения поместить в переменные?

А при загрузки этого запроса:
Data1.RecordSource = "SELECT TOP 3 Кол-во ст гр прин уч во внеуч деятельности FROM Данные ORDER BY Кол-во ст гр прин уч во внеуч деятельности DESC "
выводиться синтаксическая ошибка "3075"
...
Рейтинг: 0 / 0
Max БД
    #32858089
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BossXPА при загрузки этого запроса:
Data1.RecordSource = "SELECT TOP 3 Кол-во ст гр прин уч во внеуч деятельности FROM Данные ORDER BY Кол-во ст гр прин уч во внеуч деятельности DESC "
выводиться синтаксическая ошибка "3075"Попробуйте
Код: plaintext
Data1.RecordSource = "SELECT TOP 3 [Кол-во ст гр прин уч во внеуч деятельности] FROM [Данные] ORDER BY [Кол-во ст гр прин уч во внеуч деятельности] DESC "
...
Рейтинг: 0 / 0
Max БД
    #32858171
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BossXPMagnus23, как можно взять последние 3 числа в столбце и их значения поместить в переменные?

А при загрузки этого запроса:
Data1.RecordSource = "SELECT TOP 3 Кол-во ст гр прин уч во внеуч деятельности FROM Данные ORDER BY Кол-во ст гр прин уч во внеуч деятельности DESC "
выводиться синтаксическая ошибка "3075"
Ох...
Var1 = rs!MyField
rs.MoveNext
Var2 = rs!MyField
rs.MoveNext
Var3 = rs!MyField
...
Рейтинг: 0 / 0
Max БД
    #32858374
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если сортировака в порядке возрастания, то надо сначало перейти в конец
рекордсета
rs.MoveLast
var1 = rs!MyField
rs.MovePrevious
var2 = rs!MyField
rs.MovePrevious
var3 = rs!MyField
rs.MovePrevious

и желательно всетаки проверять на то, что данные есть, а то будут ошибки валится
...
Рейтинг: 0 / 0
Max БД
    #32859300
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да мы тут все вместе намешали. Тут все от запроса зависит. Если уж все равно сортируется в запросе то лучше сверху, без лишних телодвижений.


Magnus
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Max БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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