Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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
тогда строка (строки) с максимальным значением всплывут в верхнюю часть таблицы … и делайте с ними, что душе угодно. |
|
Вернуться к началу |
|
|
Alex
Зарегистрирован: 31.10.2008 Сообщения: 80
|
Добавлено: Пн Окт 12, 2015 12:04 am Заголовок сообщения: |
|
|
Спасибо за оригинальное решение.
Может есть несложное решение тому как из численных значений в полях A, B, C узнать для любой строки таблицы в каком поле находится максимальное число? |
|
Вернуться к началу |
|
|
thegeo
Зарегистрирован: 17.01.2012 Сообщения: 119
|
Добавлено: Пн Окт 12, 2015 12:29 am Заголовок сообщения: |
|
|
Думаю, что без кода здесь не обойтись. Пишете функцию, которая возвращает имя поля с максимальным значением, на входе выбранная строка. |
|
Вернуться к началу |
|
|
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 |
|
Вернуться к началу |
|
|
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 |
|
Вернуться к началу |
|
|
|