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

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

Добавлено: 26 сен 2013, 09:52
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
то выводит все записи из второй таблицы, а надо только последнюю по дате.

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

Добавлено: 26 сен 2013, 11:00
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.

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

Добавлено: 26 сен 2013, 11:10
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)
));

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

Добавлено: 26 сен 2013, 11:25
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)
К сожалению не подходит, версия атлантиса старая (

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

Добавлено: 26 сен 2013, 11:27
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.
Чёт пока не осознал : (
Насчет дат, одинаковых дат быть не может, т.е. проверять ключ при совпадании дат нет необходимости.