Страница 1 из 1

Как найти максимальное значение в таблице

Добавлено: 11 сен 2003, 21:10
blackoff
Такая проблема:
Необходимо в подцепленной таблице найти запись, в которой значение поля с максимальной датой. И вывести только эту запись.
Подцепка происходит след. образом:
dogovor.nrec == statlog.cdoc

а поле statlog.doper.

Каким образом это можно сделать? ??? ???

Re: Как найти максимальное значение в таблице

Добавлено: 11 сен 2003, 21:41
Deinis
Написать свой фейс :))
LoT-файл на такое не способен.

Re: Как найти максимальное значение в таблице

Добавлено: 12 сен 2003, 10:06
Spvl
ЕСЛИ ЭТО ОТЧЕТ ARD
то можно использовать
"Цикл по таблице с группировкой "
при этом можно использовать атрибуты агрегирования значений "MAX" "Min" "AVG" "SUM"

или же при запросе указать сортировку по дате
а потом соответственно встать на первую или последнею запись по этой сортировке. Тут могут возникнуть ньюансы с индексами.

Re: Как найти максимальное значение в таблице

Добавлено: 12 сен 2003, 10:16
Den
Можно и простенький .ard :

.form mmm
.nameinlist 'Вывод наибольшего...'
.ard
.var
first :integer
yesorno :boolean
prevdate :date
.endvar
.create view t1 as select
* from basedoc,basefin
where ((
comp(281474976721727)==basedoc.nrec
and basedoc.nrec==basefin.cbasedoc))
order by basefin.ddoc (desc);
.begin
first :=1;
yesorno:=true;
end.
.{table t1
.begin
if prevdate<>t1.basefin.ddoc
{
prevdate:=t1.basefin.ddoc;
if first<>1
{
mmm.fbreak;
yesorno:=false;
}
first:=0;
}
end.
.{?internal; yesorno=true
.fields
t1.basedoc.ddoc t1.basefin.ddoc t1.basefin.summa
.endfields
^ ^ ^
.}
.}
.endform

Re: Как найти максимальное значение в таблице

Добавлено: 16 сен 2003, 09:22
GTHack
Den - несколько не в тему ардшник.
Насколько я понял он просто первую попавшуюся оплату выводит и на второй записи basefin вываливается по mmm.fbreak. Даже проверил на всякий пожарный.

Re: Как найти максимальное значение в таблице

Добавлено: 16 сен 2003, 09:24
GTHack
С Деинисом согласен на все 100, а вот Павла Шабалина хотелось бы на счет атребутов агрегированных значений хотелось бы попросить поподробнее объяснить.

Re: Как найти максимальное значение в таблице

Добавлено: 16 сен 2003, 09:56
Den
2 GT Alex

Дмитрйи Чернецов писал :

...
Необходимо в подцепленной таблице найти запись, в которой значение поля с максимальной датой. И вывести только эту запись
...

Мой отчет берет первые попавшиеся оплаты с максимальной датой (их в басефине м.б. несколько). И выводит только эти записи. Что вообщем-то и хотел Дмитрий. Или не так ????

Re: Как найти максимальное значение в таблице

Добавлено: 16 сен 2003, 10:37
GTHack
конечно не так - говорю же он просто первую же запись из выборки basefin выводит и вываливается, (или несколько - если у первых записей дата одинаковая).

рассмотрим цикл по t1
допустим у первой записи basefin дата меньше!, чем у второй

1ая итерация
prevdate:=t1.basefin.ddoc;
first:=0;
вывод данных !

2я итерация
prevdate:=t1.basefin.ddoc;
mmm.fbreak; !!! (т.к. first=0)


если я не прав - поправьте

Re: Как найти максимальное значение в таблице

Добавлено: 16 сен 2003, 11:01
Den
>конечно не так - говорю же он просто первую >же запись из выборки basefin выводит и >вываливается, (или несколько - если у >первых записей дата одинаковая).

Ну дак он так и хотел (..вывести только эту запись..!!!). Ну не нужны ему остальные basefin-ы - толко самые поздние по дате. Или опять не так ;)

Re: Как найти максимальное значение в таблице

Добавлено: 16 сен 2003, 11:54
GTHack
блин не по шарам называется - сортировку не заметил - все ок должно быть
! но у меня почему при компиляции выдает предупреждение
" c органичением RELATION порядок STANDART Реализуется на внешней выгрузке"
и сам отчет работает - как без сортировки по дате

в чем дело ?

Re: Как найти максимальное значение в таблице

Добавлено: 16 сен 2003, 12:21
Den
такое сообщение выдается, когда индекса подходящего нет. Но работать должно , во всяком случае у меня пашет точно..

Re: Как найти максимальное значение в таблице

Добавлено: 17 сен 2003, 01:59
Maverick
Ребят, а почему бы вам не заюзать таку весчь:
в логической табле описываем такую связку

...
dogovor.nrec == statlog.cdoc And
d1 <<= statlog.ddoc (noIndex) And
d2 >>= statlog.ddoc (noIndex)
...

а в обработчике делаем так:
handleEvent
cmInit :
{
d1 := Date (0,0,0); //минимальная дата
d2 := Date (31,12,2999); //max
If GetFirst Dogovor = tsOk
Do
{
If GetLast StatLog = tsOk then
Message ('Возможно это макс.дата')ж
}
While (GetNext Dogovor = tsOk);
};

End;