Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Max БД / 17 сообщений из 17, страница 1 из 1
07.01.2005, 22:33:01
    #32856190
BossXP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max БД
Вопрос в следуещем:
Как можно найти 3 самых больших числа в столбце и закинуть их в массив?
Можно это сделать без SQL запросов? И как с SQL?
Заранее спасибо.
...
Рейтинг: 0 / 0
07.01.2005, 23:36:46
    #32856206
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max БД
Проще всего - открыть рекордсет в SQL которого стоит ORDER BY ... DESC
...
Рейтинг: 0 / 0
08.01.2005, 00:46:18
    #32856227
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max БД
SELECT TOP 3 my_field FROM my_table ORDER BY my_field
...
Рейтинг: 0 / 0
08.01.2005, 05:38:39
    #32856257
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max БД
LepsikSELECT TOP 3 my_field FROM my_table ORDER BY my_field DESC
...
Рейтинг: 0 / 0
08.01.2005, 16:04:02
    #32856442
BossXP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max БД
А без помощи SQL как вывести?
...
Рейтинг: 0 / 0
08.01.2005, 16:47:47
    #32856457
Green2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max БД
Чтобы вручную сделать это, надо переписать
SELECT TOP 3 my_field FROM my_table ORDER BY my_field DESC
на бейсике
--

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


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


Magnus
...
Рейтинг: 0 / 0
09.01.2005, 12:38:53
    #32856725
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max БД
Вы не уточнили откуда столбец.
Если из рекордсета, то:
Код: 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
10.01.2005, 15:28:45
    #32857644
BossXP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max БД
Magnus23, числа в БД не отсортированы, но я их сортирую при загрузке формы:
Data1.RecordSource = "SELECT * FROM Данные ORDER BY [Группа] ASC"
воть, тут то мне и надо определить наибольшее число в СТОЛБЦЕ, потом найти 2 MAX число и 3...
Впринципе можно их закинуть в переменную например MaxChislo(2), так даже будет лучше...
...
Рейтинг: 0 / 0
10.01.2005, 15:50:30
    #32857673
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max БД
Может вы не поняли.
если 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
10.01.2005, 15:58:19
    #32857683
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max БД
BossXPMagnus23, числа в БД не отсортированы, но я их сортирую при загрузке формы:
Data1.RecordSource = "SELECT * FROM Данные ORDER BY [Группа] ASC"
воть, тут то мне и надо определить наибольшее число в СТОЛБЦЕ, потом найти 2 MAX число и 3...
Впринципе можно их закинуть в переменную например MaxChislo(2), так даже будет лучше...

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

А при загрузки этого запроса:
Data1.RecordSource = "SELECT TOP 3 Кол-во ст гр прин уч во внеуч деятельности FROM Данные ORDER BY Кол-во ст гр прин уч во внеуч деятельности DESC "
выводиться синтаксическая ошибка "3075"
...
Рейтинг: 0 / 0
10.01.2005, 21:06:32
    #32858089
Alexey Kudinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max БД
BossXPА при загрузки этого запроса:
Data1.RecordSource = "SELECT TOP 3 Кол-во ст гр прин уч во внеуч деятельности FROM Данные ORDER BY Кол-во ст гр прин уч во внеуч деятельности DESC "
выводиться синтаксическая ошибка "3075"Попробуйте
Код: plaintext
Data1.RecordSource = "SELECT TOP 3 [Кол-во ст гр прин уч во внеуч деятельности] FROM [Данные] ORDER BY [Кол-во ст гр прин уч во внеуч деятельности] DESC "
...
Рейтинг: 0 / 0
10.01.2005, 23:55:24
    #32858171
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max БД
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
11.01.2005, 09:44:40
    #32858374
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max БД
Если сортировака в порядке возрастания, то надо сначало перейти в конец
рекордсета
rs.MoveLast
var1 = rs!MyField
rs.MovePrevious
var2 = rs!MyField
rs.MovePrevious
var3 = rs!MyField
rs.MovePrevious

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


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


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