powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос с ID следущей строки в текущей
6 сообщений из 6, страница 1 из 1
Запрос с ID следущей строки в текущей
    #40132937
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток. Помогите эфективно составить такой запрос.
При первом обращении к записям таблицы, выбирается N-число строк, с определенной сортировкой.
Последующие же обращения должны выбирать только строки, с датой измения выше даты первоначальной выборки (
Для этой даты предусмотрен столбец). Чтоб передать выбраные строки в порядке их сортировки, с помощью
функции LAG передается ID следущей строки в текущей(не важно: следующей, или предыдущей). Вопрос такой:
есть ли возможность передать ID следущей/предыдущей строки, при повторном запросе (где выбираются строки только
с датой выше)? Проблема в том, что при условии выборки строк с датой выше, строки, с датой ниже не попадают в условия отбора.
А, функция LAG вернет ID следущей строки из текущих условий отбора. Что нарушит сортировку в общем списке.
...
Рейтинг: 0 / 0
Запрос с ID следущей строки в текущей
    #40132944
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предоставление примера исходных данных в формате with, примера запроса, увеличит кол-во желающих помочь.
...
Рейтинг: 0 / 0
Запрос с ID следущей строки в текущей
    #40132948
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm,
create table DEBUG
(
DEBUG_id VARCHAR2(4) not null,
DEBUG_name VARCHAR2(30) not null,
date_update DATE default CURRENT_DATE not null
);

alter table DEBUG
add constraint K_DEBUG primary key (DEBUG_id);

begin
for c in 1001..1020 loop
insert into debug(debug_id,
debug_name)
values(c,
'debug_name'||c);
commit;
end loop;
end;

select t.debug_id,
t.debug_name,
LEAD(t.debug_id) over (ORDER BY t.debug_name desc) AS prev_id
from DEBUG t
order by t.debug_name;

1020 debug_name1020 1019
1019 debug_name1019 1018
1018 debug_name1018 1017
1017 debug_name1017 1016
1016 debug_name1016 1015
1015 debug_name1015 1014
1014 debug_name1014 1013
1013 debug_name1013 1012
1012 debug_name1012 1011
1011 debug_name1011 1010
1010 debug_name1010 1009
1009 debug_name1009 1008
1008 debug_name1008 1007
1007 debug_name1007 1006
1006 debug_name1006 1005
1005 debug_name1005 1004
1004 debug_name1004 1003
1003 debug_name1003 1002
1002 debug_name1002 1001
1001 debug_name1001

update DEBUG t
set t.debug_name = t.debug_name,
t.date_update = CURRENT_DATE
where t.debug_id > 1015;
commit;

select t.debug_id,
t.debug_name,
LEAD(t.debug_id) over (ORDER BY t.debug_name desc) AS prev_id
from DEBUG t
order by t.debug_name desc;

1020 debug_name1020 1019
1019 debug_name1019 1018
1018 debug_name1018 1017
1017 debug_name1017 1016
1016 debug_name1016 1015
1015 debug_name1015 1014
1014 debug_name1014 1013
1013 debug_name1013 1012
1012 debug_name1012 1011
1011 debug_name1011 1010
1010 debug_name1010 1009
1009 debug_name1009 1008
1008 debug_name1008 1007
1007 debug_name1007 1006
1006 debug_name1006 1005
1005 debug_name1005 1004
1004 debug_name1004 1003
1003 debug_name1003 1002
1002 debug_name1002 1001
1001 debug_name1001




select t.debug_id,
t.debug_name,
LEAD(t.debug_id) over (ORDER BY t.debug_name desc) AS prev_id
from DEBUG t
where t.date_update > (select tt.date_update
from DEBUG tt
where tt.debug_id = 1001)
order by t.debug_name desc;

1020 debug_name1020 1019
1019 debug_name1019 1018
1018 debug_name1018 1017
1017 debug_name1017 1016
1016 debug_name1016 ____ -- тут должно быть '1015'
...
Рейтинг: 0 / 0
Запрос с ID следущей строки в текущей
    #40132954
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
with t as (
           select  debug_id,
                   debug_name,
                   LEAD(debug_id) over (ORDER BY debug_name desc) AS prev_id,
                   date_update
             from  DEBUG t
          )
select  debug_id,
        debug_name,
        prev_id
  from  t
  where t.date_update > (
                         select  tt.date_update
                           from  DEBUG tt
                           where tt.debug_id = 1001
                        )
  order by debug_name desc
/

DEBU DEBUG_NAME                     PREV
---- ------------------------------ ----
1020 debug_name1020                 1019
1019 debug_name1019                 1018
1018 debug_name1018                 1017
1017 debug_name1017                 1016
1016 debug_name1016                 1015

SQL>



SY.
...
Рейтинг: 0 / 0
Запрос с ID следущей строки в текущей
    #40132955
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lemkoleg,

Для оформления кода используйте, пожалуйста, тэг SRC.
...
Рейтинг: 0 / 0
Запрос с ID следущей строки в текущей
    #40132958
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
Lemkoleg,

Для оформления кода используйте, пожалуйста, тэг SRC.

Хорошо
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос с ID следущей строки в текущей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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