www.map-info.ru :: Просмотр темы - max/min за один шаг
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
Alex



Зарегистрирован: 31.10.2008
Сообщения: 80

СообщениеДобавлено: Сб Окт 10, 2015 10:21 pm    Заголовок сообщения: max/min за один шаг Добавить ответ со ссылкой на данный текст

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

Это двухэтапная задача.
А существует ли способ решить задачу в один этап?

Спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
thegeo



Зарегистрирован: 17.01.2012
Сообщения: 119

СообщениеДобавлено: Вс Окт 11, 2015 2:11 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Можно просто выполнить сортировку
Select * from ИмяТаблицы order by ИмяПоля desc into Selection
Browse * From Selection
тогда строка (строки) с максимальным значением всплывут в верхнюю часть таблицы … и делайте с ними, что душе угодно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Alex



Зарегистрирован: 31.10.2008
Сообщения: 80

СообщениеДобавлено: Пн Окт 12, 2015 12:04 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Спасибо за оригинальное решение.
Может есть несложное решение тому как из численных значений в полях A, B, C узнать для любой строки таблицы в каком поле находится максимальное число?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
thegeo



Зарегистрирован: 17.01.2012
Сообщения: 119

СообщениеДобавлено: Пн Окт 12, 2015 12:29 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Думаю, что без кода здесь не обойтись. Пишете функцию, которая возвращает имя поля с максимальным значением, на входе выбранная строка.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Alex



Зарегистрирован: 31.10.2008
Сообщения: 80

СообщениеДобавлено: Пн Окт 12, 2015 5:51 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Определенно, без кода не обойтись, только пока всячески избегаю всякого, где пользоваться нужно функциями. Пока я их не понимаю.
Не хочется использовать Select, так как много строк и будет долго выполняться расчет.
Спасибо за Ваш совет.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex



Зарегистрирован: 31.10.2008
Сообщения: 80

СообщениеДобавлено: Пн Окт 12, 2015 11:48 pm    Заголовок сообщения: нашел решение Добавить ответ со ссылкой на данный текст

Выглядит так:
необходимо отыскать максимальное значение из 6 значений (в моем случае их только 6).
Здесь нет возможности видеть какие переменные обладают максимальным значением в случае, если максимальное значение встречается более одного раза, но пока этого функционала достаточно.
может кому мой пример пригодится.
пожалуйста пользуйтесь.

sub main
dim q, w1, w2, w3, w4, w5, w6, max As Integer

w1 = 1
w2 = 2
w3 = 3
w4 = 4
w5 = 5
w6 = 6

if w1 >= w2 Then
max = w1
q = 1
else
max = w2
q = 2
end If

if max >= w3 Then
max = max
q = 2
else
max = w3
q = 3
end If

if max >= w4 Then
max = max
q = 3
else
max = w4
q = 4
end If

if max >= w5 Then
max = max
q = 4
else
max = w5
q = 5
end If

if max >= w6 Then
max = max
q = 5
else
max = w6
q = 6
end If

note "MAX = " + max
+ chr$(10) +
"q = " + q

end sub
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
thegeo



Зарегистрирован: 17.01.2012
Сообщения: 119

СообщениеДобавлено: Вт Окт 13, 2015 6:23 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Логичнее использовать массив и тогда многое решается проще. Например, так

Sub Main
dim vls(6),jj,mx as integer
vls(1)=11
vls(2)=11
vls(3)=33
vls(4)=66
vls(5)=22
vls(6)=44
mx= getMax(vls,jj)
note "Max=" & mx & ", Index=" & jj
End Sub
function getMax(vv() as integer,k as integer) as integer
dim i,m as integer
m=vv(1)
For i = 2 To ubound(vv)
if vv(i)>m then
m=vv(i)
k=i
End If
Next
getMax=m
End Function
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Alex



Зарегистрирован: 31.10.2008
Сообщения: 80

СообщениеДобавлено: Чт Окт 15, 2015 8:26 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Большое спасибо.
Хороший пример, чтобы понять потенциал функций на конкретной реализации.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Milovan_S



Зарегистрирован: 22.04.2013
Сообщения: 11

СообщениеДобавлено: Пн Дек 07, 2015 1:26 pm    Заголовок сообщения: SQL в один присест (Min/Max) Добавить ответ со ссылкой на данный текст

Fields {Min(название поля), Max(название поля)}
Tables {Имя таблицы}
Where {}
Group {}
Order {}
Into {ZZZ}
Browse
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru