Как найти максимальное значение в таблице
Модераторы: m0p3e, edward_K, Модераторы
-
- Постоянный гость
- Сообщения: 55
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Тверь/Москва
- Контактная информация:
Как найти максимальное значение в таблице
Такая проблема:
Необходимо в подцепленной таблице найти запись, в которой значение поля с максимальной датой. И вывести только эту запись.
Подцепка происходит след. образом:
dogovor.nrec == statlog.cdoc
а поле statlog.doper.
Каким образом это можно сделать? ??? ???
Необходимо в подцепленной таблице найти запись, в которой значение поля с максимальной датой. И вывести только эту запись.
Подцепка происходит след. образом:
dogovor.nrec == statlog.cdoc
а поле statlog.doper.
Каким образом это можно сделать? ??? ???
-
- Местный житель
- Сообщения: 783
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
Re: Как найти максимальное значение в таблице
Написать свой фейс )
LoT-файл на такое не способен.
LoT-файл на такое не способен.
Re: Как найти максимальное значение в таблице
ЕСЛИ ЭТО ОТЧЕТ ARD
то можно использовать
"Цикл по таблице с группировкой "
при этом можно использовать атрибуты агрегирования значений "MAX" "Min" "AVG" "SUM"
или же при запросе указать сортировку по дате
а потом соответственно встать на первую или последнею запись по этой сортировке. Тут могут возникнуть ньюансы с индексами.
то можно использовать
"Цикл по таблице с группировкой "
при этом можно использовать атрибуты агрегирования значений "MAX" "Min" "AVG" "SUM"
или же при запросе указать сортировку по дате
а потом соответственно встать на первую или последнею запись по этой сортировке. Тут могут возникнуть ньюансы с индексами.
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Как найти максимальное значение в таблице
Можно и простенький .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
.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
-
- Местный житель
- Сообщения: 517
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Новосибирск Новосибирск
- Контактная информация:
Re: Как найти максимальное значение в таблице
Den - несколько не в тему ардшник.
Насколько я понял он просто первую попавшуюся оплату выводит и на второй записи basefin вываливается по mmm.fbreak. Даже проверил на всякий пожарный.
Насколько я понял он просто первую попавшуюся оплату выводит и на второй записи basefin вываливается по mmm.fbreak. Даже проверил на всякий пожарный.
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
-
- Местный житель
- Сообщения: 517
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Новосибирск Новосибирск
- Контактная информация:
Re: Как найти максимальное значение в таблице
С Деинисом согласен на все 100, а вот Павла Шабалина хотелось бы на счет атребутов агрегированных значений хотелось бы попросить поподробнее объяснить.
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Как найти максимальное значение в таблице
2 GT Alex
Дмитрйи Чернецов писал :
...
Необходимо в подцепленной таблице найти запись, в которой значение поля с максимальной датой. И вывести только эту запись
...
Мой отчет берет первые попавшиеся оплаты с максимальной датой (их в басефине м.б. несколько). И выводит только эти записи. Что вообщем-то и хотел Дмитрий. Или не так ????
Дмитрйи Чернецов писал :
...
Необходимо в подцепленной таблице найти запись, в которой значение поля с максимальной датой. И вывести только эту запись
...
Мой отчет берет первые попавшиеся оплаты с максимальной датой (их в басефине м.б. несколько). И выводит только эти записи. Что вообщем-то и хотел Дмитрий. Или не так ????
-
- Местный житель
- Сообщения: 517
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Новосибирск Новосибирск
- Контактная информация:
Re: Как найти максимальное значение в таблице
конечно не так - говорю же он просто первую же запись из выборки basefin выводит и вываливается, (или несколько - если у первых записей дата одинаковая).
рассмотрим цикл по t1
допустим у первой записи basefin дата меньше!, чем у второй
1ая итерация
prevdate:=t1.basefin.ddoc;
first:=0;
вывод данных !
2я итерация
prevdate:=t1.basefin.ddoc;
mmm.fbreak; !!! (т.к. first=0)
если я не прав - поправьте
рассмотрим цикл по 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]
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Как найти максимальное значение в таблице
>конечно не так - говорю же он просто первую >же запись из выборки basefin выводит и >вываливается, (или несколько - если у >первых записей дата одинаковая).
Ну дак он так и хотел (..вывести только эту запись..!!!). Ну не нужны ему остальные basefin-ы - толко самые поздние по дате. Или опять не так
Ну дак он так и хотел (..вывести только эту запись..!!!). Ну не нужны ему остальные basefin-ы - толко самые поздние по дате. Или опять не так
-
- Местный житель
- Сообщения: 517
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Новосибирск Новосибирск
- Контактная информация:
Re: Как найти максимальное значение в таблице
блин не по шарам называется - сортировку не заметил - все ок должно быть
! но у меня почему при компиляции выдает предупреждение
" c органичением RELATION порядок STANDART Реализуется на внешней выгрузке"
и сам отчет работает - как без сортировки по дате
в чем дело ?
! но у меня почему при компиляции выдает предупреждение
" c органичением RELATION порядок STANDART Реализуется на внешней выгрузке"
и сам отчет работает - как без сортировки по дате
в чем дело ?
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Как найти максимальное значение в таблице
такое сообщение выдается, когда индекса подходящего нет. Но работать должно , во всяком случае у меня пашет точно..
-
- Абориген
- Сообщения: 943
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: External Developer
- Контактная информация:
Re: Как найти максимальное значение в таблице
Ребят, а почему бы вам не заюзать таку весчь:
в логической табле описываем такую связку
...
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;
в логической табле описываем такую связку
...
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;