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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
blackoff
Постоянный гость
Сообщения: 55
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Тверь/Москва
Контактная информация:

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

Сообщение blackoff »

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

а поле statlog.doper.

Каким образом это можно сделать? ??? ???
Deinis
Местный житель
Сообщения: 783
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

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

Сообщение Deinis »

Написать свой фейс :))
LoT-файл на такое не способен.
Spvl
Постоянный обитатель
Сообщения: 136
Зарегистрирован: 29 мар 2005, 17:49

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

Сообщение Spvl »

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

или же при запросе указать сортировку по дате
а потом соответственно встать на первую или последнею запись по этой сортировке. Тут могут возникнуть ньюансы с индексами.
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение 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
GTHack
Местный житель
Сообщения: 517
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск Новосибирск
Контактная информация:

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

Сообщение GTHack »

Den - несколько не в тему ардшник.
Насколько я понял он просто первую попавшуюся оплату выводит и на второй записи basefin вываливается по mmm.fbreak. Даже проверил на всякий пожарный.
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
GTHack
Местный житель
Сообщения: 517
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск Новосибирск
Контактная информация:

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

Сообщение GTHack »

С Деинисом согласен на все 100, а вот Павла Шабалина хотелось бы на счет атребутов агрегированных значений хотелось бы попросить поподробнее объяснить.
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

2 GT Alex

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

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

Мой отчет берет первые попавшиеся оплаты с максимальной датой (их в басефине м.б. несколько). И выводит только эти записи. Что вообщем-то и хотел Дмитрий. Или не так ????
GTHack
Местный житель
Сообщения: 517
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск Новосибирск
Контактная информация:

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

Сообщение GTHack »

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

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

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

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


если я не прав - поправьте
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

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

Ну дак он так и хотел (..вывести только эту запись..!!!). Ну не нужны ему остальные basefin-ы - толко самые поздние по дате. Или опять не так ;)
GTHack
Местный житель
Сообщения: 517
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск Новосибирск
Контактная информация:

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

Сообщение GTHack »

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

в чем дело ?
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

такое сообщение выдается, когда индекса подходящего нет. Но работать должно , во всяком случае у меня пашет точно..
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

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

Сообщение 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;
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Ответить