Запрос последней записи

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

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

Ответить
Den_Is
Постоянный обитатель
Сообщения: 169
Зарегистрирован: 08 авг 2005, 20:11
Откуда: Омск

Запрос последней записи

Сообщение Den_Is »

Кто сталиквался, может быть подскажите?
Есть условно две таблицы: таблица1 (table1) и таблица2 (table2)
Таблица 2 связана с таблицей 1 так ((table1.nrec==table2.ctable1))
В таблице 2 есть скажем поле типа дата table2.dateR.
Нужно вывести скажем так:
select table1.nrec, table2.nrec, table2.dateR
Но нужно вывести последнюю по дате запись из таблицы 2, т.е. типа get last table2 при сортировке order by table2.dateR
Вот если в vip - е делать тут вопросов нет, все просто, но как сделать одним запросом, не пойму.
Если делать так
select table1.nrec, table2.nrec, table2.dateR
where ((table1.nrec==table2.ctable1)) order by table2.dateR
то выводит все записи из второй таблицы, а надо только последнюю по дате.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Запрос последней записи

Сообщение edward_K »

ну либо DSQL
либо так
from ... table2 table3
where ((

and table1.nrec == table3.ctable1
and table2.atl_lastdate << table3.atl_lastdate(noindex)
and table2/atl_lasttime << table3.atl_lasttime(noindex)
)) and not isvalidall(tntable3);

если просто по дате могут быть проблемы - нужен еще проверить ключ при совпадении дат - хоть nrec.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Запрос последней записи

Сообщение RAJAH »

Код: Выделить всё

select table1.nrec, table2.nrec, table2.dateR
from table1, table2,
(select max(table1.nrec)(fieldname=maxnrec)
 from table1, table2,
 (select max(table2.dateR)(fieldname=maxdate)
  from table1, table2
  where
  ((
  table1.nrec /== table2.ctable1
  ))
 )
 where
 ((
 table1.nrec /== table2.ctable1 and (table2.dateR = maxdate)
 ))
)
where
((
table1.nrec /== table2.ctable1 and (table1.nrec = maxnrec)
));
Den_Is
Постоянный обитатель
Сообщения: 169
Зарегистрирован: 08 авг 2005, 20:11
Откуда: Омск

Re: Запрос последней записи

Сообщение Den_Is »

RAJAH писал(а):

Код: Выделить всё

select table1.nrec, table2.nrec, table2.dateR
from table1, table2,
(select max(table1.nrec)(fieldname=maxnrec)
 from table1, table2,
 (select max(table2.dateR)(fieldname=maxdate)
К сожалению не подходит, версия атлантиса старая (
Den_Is
Постоянный обитатель
Сообщения: 169
Зарегистрирован: 08 авг 2005, 20:11
Откуда: Омск

Re: Запрос последней записи

Сообщение Den_Is »

edward_K писал(а):ну либо DSQL
либо так
from ... table2 table3
where ((

and table1.nrec == table3.ctable1
and table2.atl_lastdate << table3.atl_lastdate(noindex)
and table2/atl_lasttime << table3.atl_lasttime(noindex)
)) and not isvalidall(tntable3);

если просто по дате могут быть проблемы - нужен еще проверить ключ при совпадении дат - хоть nrec.
Чёт пока не осознал : (
Насчет дат, одинаковых дат быть не может, т.е. проверять ключ при совпадании дат нет необходимости.
Ответить