Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Запрос последней даты  [new]
Strong
Member

Откуда: Россия
Сообщений: 277
есть 2 таблицы в одной журнал действий пользователя (usrlog ), в другой данные с которыми он манипулировал (Table).
есть определенная дата (tLastUseTime)
Необходимо отобрать данные из Table и usrlog с даты (tLastUseTime) по текущую.
запрос :

SELECT Table.*, usrlog.time ;
FROM Table INNER JOIN usrlog ;
ON Table.rn=usrlog.key ;
WHERE usrlog.time > tLastUseTime INTO CURSOR cur_ Table

выбирает в курсор две одинаковые записи с разным временем изменения, (time), попадающие в промежуток usrlog.time > tLastUseTime,
а нужна только запись с последним изменением.
Как этого добиться?
VFP 8.0

______________________________________
с уважением: Strong
25 янв 05, 11:05    [1270940]     Ответить | Цитировать Сообщить модератору
 Re: Запрос последней даты  [new]
w3d
Member

Откуда: Сургут
Сообщений: 681
SELECT TOP 1 ....... ORDER BY usrlog.time DESC
25 янв 05, 11:35    [1271107]     Ответить | Цитировать Сообщить модератору
 Re: Запрос последней даты  [new]
Grumax_user
Member

Откуда: Россия,г. Кинешма
Сообщений: 147
Делаю предположение, что у каждой записи есть свой уникальный ключ Usrlog.Id_UserLog - для таблицы действий Table.RN - для таблицы манипулятора, т.к. вероятно они обе из базы, организация коей трудновата без ключей. :-))

  SELECT Usrlog.Id_UserLog, MAX(Usrlog.Time), Table.RN ;
 FROM ;
  Table INNER JOIN usrlog ON Table.rn=usrlog.key ;
 WHERE usrlog.time > tLastUseTime ORDER BY Usrlog.Id_UserLog GROUP BY Table.RN, Usrlog.Id_UserLog INTO CURSOR cur_varibal NOFILTER

*выбрали все записи удовлетворяющие условию usrlog.time > tLastUseTime и взяли МАХ дату, т.е. дату последнего изменения. 
*Далее выбираем все записи из курсора связь с UsrLog.dbf один к одному

  SELECT Table.*, usrlog.time , cur_varibal.Id_UserLog;
   FROM ;
  cur_varibal ;
  INNER JOIN usrlog ;
   ON cur_varibal.Id_UserLog=usrlog.Id_UserLog ;
  INNER JOIN Table ;
   ON usrlog.key= Table.rn ;
  INTO CURSOR cur_ Table

Я во все дела суюсь -> всесторонне разовьюсь
25 янв 05, 11:52    [1271204]     Ответить | Цитировать Сообщить модератору
 Re: Запрос последней даты  [new]
Strong
Member

Откуда: Россия
Сообщений: 277
w3d
SELECT TOP 1 ....... ORDER BY usrlog.time DESC

Oшибка N 1806 SQL: Столбец 'TIME' не найден.
25 янв 05, 12:38    [1271418]     Ответить | Цитировать Сообщить модератору
 Re: Запрос последней даты  [new]
Strong
Member

Откуда: Россия
Сообщений: 277
Grumax_user
Делаю предположение, что у каждой записи есть свой уникальный ключ Usrlog.Id_UserLog - для таблицы действий Table.RN - для таблицы манипулятора, т.к. вероятно они обе из базы, организация коей трудновата без ключей. :-))



уникальный ключ Usrlog.Id_UserLog - ну нету такого :-(
25 янв 05, 12:40    [1271426]     Ответить | Цитировать Сообщить модератору
 Re: Запрос последней даты  [new]
leaf
Member [заблокирован]

Откуда: Ростов-на-Дону --> Москва
Сообщений: 2661
одним запросом может не получиться
25 янв 05, 12:49    [1271461]     Ответить | Цитировать Сообщить модератору
 Re: Запрос последней даты  [new]
w3d
Member

Откуда: Сургут
Сообщений: 681
Strong
w3d
SELECT TOP 1 ....... ORDER BY usrlog.time DESC

Oшибка N 1806 SQL: Столбец 'TIME' не найден.


Ну я вообще-то имел в виду, что надо отобрать 1 "верхнюю" запись с сортировкой по убыванию по полю, где дата.
Над правильным синтаксисом я не думал
25 янв 05, 12:56    [1271491]     Ответить | Цитировать Сообщить модератору
 Re: Запрос последней даты  [new]
Strong
Member

Откуда: Россия
Сообщений: 277
w3d
Ну я вообще-то имел в виду, что надо отобрать 1 "верхнюю" запись с сортировкой по убыванию по полю, где дата.


Это понятно, а куда я time то присобачу если в TABLE его нет
25 янв 05, 13:10    [1271531]     Ответить | Цитировать Сообщить модератору
 Re: Запрос последней даты  [new]
Дмитрий Маликов
Member

Откуда: Новосибирск
Сообщений: 179
такой вариант запроса:
SELECT Table.*, usrlog.time ;
FROM Table INNER JOIN usrlog ;
ON Table.rn=usrlog.key ;
WHERE usrlog.time > tLastUseTime ;
GROUP by Table.m ;
HAVING usrlog.time = max(usrlog.time) ;
INTO CURSOR cur_ Table
25 янв 05, 13:14    [1271550]     Ответить | Цитировать Сообщить модератору
 Re: Запрос последней даты  [new]
Grumax_user
Member

Откуда: Россия,г. Кинешма
Сообщений: 147
Фрагмент проги:

SELECT FIELD_01,FIELD_02,FIELD_03,MAX(time),key FROM Usrlog WHERE usrlog.time > tLastUseTime ORDER BY key GROUP BY FIELD_01,FIELD_02,FIELD_03,key INTO CURSOR cur_user NOFILTER READWRITE
sele cur_user
SELECT Table.*, cur_user.time ;
  FROM ;
Table ;
  INNER JOIN cur_user ;
ON Table.rn=cur_user.key ;
  INTO CURSOR cur_ Table

Я во все дела суюсь -> всесторонне разовьюсь
25 янв 05, 13:32    [1271618]     Ответить | Цитировать Сообщить модератору
 Re: Запрос последней даты  [new]
Grumax_user
Member

Откуда: Россия,г. Кинешма
Сообщений: 147
Поля FIELD_01,FIELD_02,FIELD_03 убрать, поторопился.......Сорри

Я во все дела суюсь -> всесторонне разовьюсь
25 янв 05, 14:00    [1271718]     Ответить | Цитировать Сообщить модератору
 Re: Запрос последней даты  [new]
Strong
Member

Откуда: Россия
Сообщений: 277
Дмитрий Маликов
такой вариант запроса:
SELECT Table.*, usrlog.time ;
FROM Table INNER JOIN usrlog ;
ON Table.rn=usrlog.key ;
WHERE usrlog.time > tLastUseTime ;
GROUP by Table.m ;
HAVING usrlog.time = max(usrlog.time) ;
INTO CURSOR cur_ Table

этот вариант работает

всем спасибо и персонально Дмитрию Маликову,
25 янв 05, 15:30    [1272128]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить