Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / запрос - предыдущая строка... / 10 сообщений из 10, страница 1 из 1
04.02.2004, 12:36
    #32397804
elcolex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос - предыдущая строка...
привет...

такая задача... есть таблица Routings ( composite_key text, end_address text )...
end_address - конечная точка маршрута...
composite_key - первичный ключ таблицы...
начальной точкой маршрута является предыдущее значение end_address ( из предыдущей строки )...

какой запрос нужно составить, чтобы получить таблицу со значениями начальной и конечной точки в одной строке?

я пробовал так :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT 
   f.end_address,  
   f2.end_address as [begin_address]
FROM 
   Routings f left join 
   Routings f2 on 
            f2.composite_key =  
             ( 
                    select 
                       max( f3.composite_key ) 
                    from 
                       Routings f3 
                    where 
                       f3.composite_key < f.composite_key 
             );

но появляется ошибка :
'Ошибка синтаксиса в выражении запроса : f2.composite_key = ( select max( f3.composite_key ) from Routings f3 where f3.composite_key < f.composite_key )'

что тут может быть не так???!... в SQL Server такой запрос работает отлично...

заранее благодарю за помощь...

лучше побыть дураком 15 мин., чем остаться им на всю жизнь...
...
Рейтинг: 0 / 0
04.02.2004, 14:12
    #32397994
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос - предыдущая строка...
Код: plaintext
1.
2.
3.
select f.end_address as [Start],  
         min(f2.end_address) as [Finish]
from Routings f inner join Routings f2
on f.end_address < f2.end_address

Смущает только, что ключ текстовый...
...
Рейтинг: 0 / 0
04.02.2004, 14:29
    #32398031
elcolex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос - предыдущая строка...
в силу некоторых причин, ключ является текстовым ( он составляется из нескольких столбцов, включая текстовые )... если бы ключ ( composite_key ) был простым автоинкрементом, то прошел бы такой запрос :
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT 
   f.end_address,  
   f2.end_address as [begin_address]
FROM 
   Routings f left join 
   Routings f2 on 
            f1.composite_key = f1.composite_key -  1 


но к сожалению такого у меня нет...((

2VIG
на Ваш запрос рагается акес...

лучше побыть дураком 15 мин., чем остаться им на всю жизнь...
...
Рейтинг: 0 / 0
04.02.2004, 14:38
    #32398066
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос - предыдущая строка...
комбинацию
Код: plaintext
select  МАX (TEXTFLD) from t1 


можно заменить на
Код: plaintext
select top1  TEXTFLD  from t1  order by TEXTFLD desc
...
Рейтинг: 0 / 0
04.02.2004, 14:55
    #32398107
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос - предыдущая строка...
Sorry, так правильно
Код: plaintext
1.
2.
3.
4.
select f.end_address as [Start],  
        min(f2.end_address) as [Finish]
from Routings f inner join Routings f2
on f.end_address < f2.end_address
group by f.end_address 


но к сожалению такого у меня нет.
так сделай,иначе это вряд ли будет работать
...
Рейтинг: 0 / 0
04.02.2004, 15:00
    #32398122
elcolex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос - предыдущая строка...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select 
   f.end_address,  
   f2.end_address as [begin_address]
from 
   Routings f left join 
   Routings f2 on 
            f2.composite_key =  
             ( 
                    select top  1 
                       f3.composite_key
                    from 
                       Routings f3 
                    where 
                       f3.composite_key < f.composite_key 
                   order by
                       f3.composite_key desc
             );

такая же ошибка как и в первом запросе...(

я тут прочитал, что можно сделать еще вот так :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select 
   f.end_address, 
   (  
         select 
            f2.end_address 
         from 
            Routings f2 
         where 
            f2.composite_key =  ( select max( f3.composite_key ) from Routings f3 where f3.composite_key < f.composite_key ) 
   ) AS begin_address
from 
   Routings AS f;

но такая конструкция "тормозит по черному" ( всего 200 записей в таблице )... если несколько записей, то нормально...

люди помогите!...

лучше побыть дураком 15 мин., чем остаться им на всю жизнь...
...
Рейтинг: 0 / 0
04.02.2004, 15:32
    #32398181
elcolex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос - предыдущая строка...
2VIG
спасибо, запрос заработал... но только чего-то там не то что нужно...

так сделай,иначе это вряд ли будет работать

с этим проблемс... если я в таблицу добавлю столбец с автоинкрементом, то потом можно запросто получить не корректные результаты... ситуация такая : в таблицу записываются поездки машины каждый день... строго говоря, для регистрации подобных событий нужна таблица примерно следующей структуры

id int ( autoincrement )
date date - дата поездки
car_name text - машина
end_address text - конечная точка ( куда )... так же является начальной точкой для следующей строки

дело в том, что машина может ездить в несколько мест за день и если в будущем будет добавлена запись о поездке с датой меньше чем последняя дата в таблице, то инкремент у этой записи будет больше чем у последней даты! ситуация осложняется еще тем, что может быть несколько разных машин... в общем, получаться не корректные результаты... собственно, для этого я и применяю composite_key ( car_name, date, id )...

я вот чего подумал, а в акесе можно результаты запроса залить во временную таблицу?... с добавлением поля автоинкремента?!...


лучше побыть дураком 15 мин., чем остаться им на всю жизнь...
...
Рейтинг: 0 / 0
04.02.2004, 17:50
    #32398455
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос - предыдущая строка...
я вот чего подумал, а в акесе можно результаты запроса залить во временную таблицу?... с добавлением поля автоинкремента?!...
Код: plaintext
1.
2.
3.
create table tmpRouting 
                     (id_route   AUTOINCREMENT( 1 , 1 ) PRIMARY KEY,
                     comp_key  TEXT( 50 )  NOT NULL,
                      route TEXT( 50 ) NOT NULL)
...
Рейтинг: 0 / 0
04.02.2004, 18:05
    #32398471
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос - предыдущая строка...
зайди на microsoft
поищи и скачай
QRYSMP97.exe
- там есть 4 примера
получения данных
предыдущей/следующез записи
...
Рейтинг: 0 / 0
05.02.2004, 10:33
    #32398914
elcolex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос - предыдущая строка...
2VIG
спасибо!... я Ваш предыдущий запрос немного подправил и получилось почти то, что было нужно... сейчас два запроса приходится использовать, но все-таки работает как нужно...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select 
     f.composite_key AS composite_key, 
     max( f2.composite_key ) AS composite_key_prev
from 
     Routings    f     left join
     Routings    f2   on f.composite_key > f2.composite_key
group by 
     f.composite_key;


сохраняю это как отдельный запрос, а потом делаю соединение по этим двум ключам... в общем, получается связь many-to-many...

про временные таблицы... я просто в основном работаю на T-SQL и работа в акесе не совсем привычна... если бы БД была на MSSQL, то я бы примерно, так сделал : создал хранимую процедуру и создал бы там временную таблицу, а далее уже результирующий запрос, который напраляется клиенту ( сводная таблица Excel )... а вот как ( и можно ли ) это сделать в акесе?... т.е. что-то вроде пакета инструкций sql, который возвращает таблицу!?...

2Alexus12
зайди на microsoft
поищи и скачай
QRYSMP97.exe


спасибо... скачал эти примеры, посмотрел... они спасают в случае, если первичный ключ является инкрементом... но спасибо, все равно...

лучше побыть дураком 15 мин., чем остаться им на всю жизнь...
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / запрос - предыдущая строка... / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]