powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не могу разобраться с запросом...
7 сообщений из 7, страница 1 из 1
Не могу разобраться с запросом...
    #32122560
Виктор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть табличка фиксации действий юзера по проводке документов, примерно с такими данными
ID_OBJECT ID_ACTION ACTION_DATETIME
101 0 05.02.2003 9:09:13
101 1 10.02.2003 17:55:19
101 2 10.02.2003 17:55:25
101 1 10.02.2003 17:55:28
101 2 10.02.2003 17:55:39
101 3 10.02.2003 17:55:41
101 4 10.02.2003 17:55:44
101 3 10.02.2003 17:55:52
101 2 10.02.2003 17:57:02
101 1 10.02.2003 17:57:45
101 0 10.02.2003 17:58:08

Необходимо написать запрос, который вернет 1, если строка с ID_ACTION=2 по времени после строки с ID_ACTION=3, или 0 - если перехода из 3 в 2 не было.
В голову пришел вариант
select decode(id_action, 2, 1, 0) from table
where id_object = 101 and rownum=1 and action_datetime >
(select action_datetime from table where id_object = 101
and id_action = 3 and rownum=1))

Но он не верен для приведенного примера, вот если бы модно было так -
select decode(id_action, 2, 1, 0) from table
where id_object = 101 and rownum=1 and action_datetime >
(select action_datetime from table where id_object = 101
and id_action = 3))
, без and rownum=1 в подзапросе. Но так нельзя...
И как решить задачку ?
...
Рейтинг: 0 / 0
Не могу разобраться с запросом...
    #32122567
Рустем
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надо использовать аналитические функции...
...
Рейтинг: 0 / 0
Не могу разобраться с запросом...
    #32122582
Виктор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточню - оракл 8.1.7
...
Рейтинг: 0 / 0
Не могу разобраться с запросом...
    #32122583
va_kochnev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select count(*) from dual
where exists (select 1 from kva_test a where id_object=101 and id_action=2 and
exists (select 1 from kva_test b where a.id_object=b.id_object and b.id_action=3 and a.action_datetime>b.action_datetime))
...
Рейтинг: 0 / 0
Не могу разобраться с запросом...
    #32122625
Chira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select count(*) from dual
where exists (
select null
from kva_test a, kva_test b
where a.id_object=101
and a.id_action=2
and b.id_object=101
and b.id_action=3
and a.action_datetime>b.action_datetime
)
...
Рейтинг: 0 / 0
Не могу разобраться с запросом...
    #32122628
Виктор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ведь точно, всё просто :-)
Это старость приближается :-) Или работа без отпусков и выходных... Или суета перед свадьбой влияет ...
ОК, всем спасибо!
...
Рейтинг: 0 / 0
Не могу разобраться с запросом...
    #32122633
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
drop table user_action;

create table user_action
(
 ID_OBJECT NUMBER,
ID_ACTION NUMBER,
ACTION_DATETIME  date
)
;

truncate table user_action;
insert into user_action values( 101 , 0 ,to_date('05.02.2003 9:09:13','dd.mm.yyyy hh24:mi:ss'));
insert into user_action values( 101 , 1 ,to_date('10.02.2003 17:55:19','dd.mm.yyyy hh24:mi:ss'));
insert into user_action values( 101 , 2 ,to_date('10.02.2003 17:55:25','dd.mm.yyyy hh24:mi:ss'));
insert into user_action values( 101 , 1 ,to_date('10.02.2003 17:55:28','dd.mm.yyyy hh24:mi:ss'));
insert into user_action values( 101 , 2 ,to_date('10.02.2003 17:55:39','dd.mm.yyyy hh24:mi:ss'));
insert into user_action values( 101 , 3 ,to_date('10.02.2003 17:55:41','dd.mm.yyyy hh24:mi:ss'));
insert into user_action values( 101 , 4 ,to_date('10.02.2003 17:55:44','dd.mm.yyyy hh24:mi:ss'));
insert into user_action values( 101 , 3 ,to_date('10.02.2003 17:55:52','dd.mm.yyyy hh24:mi:ss'));
insert into user_action values( 101 , 2 ,to_date('10.02.2003 17:57:02','dd.mm.yyyy hh24:mi:ss'));
insert into user_action values( 101 , 1 ,to_date('10.02.2003 17:57:45','dd.mm.yyyy hh24:mi:ss'));
insert into user_action values( 101 , 0 ,to_date('10.02.2003 17:58:08','dd.mm.yyyy hh24:mi:ss'));
commit;

select
  decode(sign(id3.action_datetime-id2.action_datetime), 1 , 0 , 1 ) act
 from
  (select
      nvl(min(ACTION_DATETIME),to_date('01.01.0001','dd.mm.yyyy')) as action_datetime
    from user_action
    where
      ID_ACTION  =  3 ) id3,
  (select
      nvl(max(ACTION_DATETIME),to_date('01.01.0001','dd.mm.yyyy')) as action_datetime
    from user_action
    where
     ID_ACTION  =  2  ) id2
;

выполнение, когда 2 > 3
Код: plaintext
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
SQLWKS> drop table user_action;
drop table user_action
           *
ORA- 00942 : таблица или представление пользователя не существует
SQLWKS> 
SQLWKS> create table user_action
      2 > (
      3 >  ID_OBJECT NUMBER,
      4 > ID_ACTION NUMBER,
      5 > ACTION_DATETIME  date
      6 > )
      7 > ;
Предложение обработано.
SQLWKS> 
SQLWKS> truncate table user_action;
Предложение обработано.
SQLWKS> insert into user_action values( 101 , 0 ,to_date('05.02.2003 9:09:13','dd.mm.yyyy hh24:mi:ss'));
Обработана  1  строка.
SQLWKS> insert into user_action values( 101 , 1 ,to_date('10.02.2003 17:55:19','dd.mm.yyyy hh24:mi:ss'));
Обработана  1  строка.
SQLWKS> insert into user_action values( 101 , 2 ,to_date('10.02.2003 17:55:25','dd.mm.yyyy hh24:mi:ss'));
Обработана  1  строка.
SQLWKS> insert into user_action values( 101 , 1 ,to_date('10.02.2003 17:55:28','dd.mm.yyyy hh24:mi:ss'));
Обработана  1  строка.
SQLWKS> insert into user_action values( 101 , 2 ,to_date('10.02.2003 17:55:39','dd.mm.yyyy hh24:mi:ss'));
Обработана  1  строка.
SQLWKS> insert into user_action values( 101 , 3 ,to_date('10.02.2003 17:55:41','dd.mm.yyyy hh24:mi:ss'));
Обработана  1  строка.
SQLWKS> insert into user_action values( 101 , 4 ,to_date('10.02.2003 17:55:44','dd.mm.yyyy hh24:mi:ss'));
Обработана  1  строка.
SQLWKS> insert into user_action values( 101 , 3 ,to_date('10.02.2003 17:55:52','dd.mm.yyyy hh24:mi:ss'));
Обработана  1  строка.
SQLWKS> insert into user_action values( 101 , 2 ,to_date('10.02.2003 17:57:02','dd.mm.yyyy hh24:mi:ss'));
Обработана  1  строка.
SQLWKS> insert into user_action values( 101 , 1 ,to_date('10.02.2003 17:57:45','dd.mm.yyyy hh24:mi:ss'));
Обработана  1  строка.
SQLWKS> insert into user_action values( 101 , 0 ,to_date('10.02.2003 17:58:08','dd.mm.yyyy hh24:mi:ss'));
Обработана  1  строка.
SQLWKS> commit;
Предложение обработано.
SQLWKS> 
SQLWKS> select
      2 >   decode(sign(id3.action_datetime-id2.action_datetime), 1 , 0 , 1 ) act
      3 >  from
      4 >   (select
      5 >       nvl(min(ACTION_DATETIME),to_date('01.01.0001','dd.mm.yyyy')) as action_datetime
      6 >     from user_action
      7 >     where
      8 >       ID_ACTION  =  3 ) id3,
      9 >   (select
     10 >       nvl(max(ACTION_DATETIME),to_date('01.01.0001','dd.mm.yyyy')) as action_datetime
     11 >     from user_action
     12 >     where
     13 >      ID_ACTION  =  2  ) id2
     14 > ;
ACT       
 ----------
 
          1 
Выбрана  1  строка.


выполнение, когда 3 > 2
Код: plaintext
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
truncate table user_action;
insert into user_action values( 101 , 0 ,to_date('05.02.2003 9:09:13','dd.mm.yyyy hh24:mi:ss'));
insert into user_action values( 101 , 1 ,to_date('10.02.2003 17:55:19','dd.mm.yyyy hh24:mi:ss'));
insert into user_action values( 101 , 2 ,to_date('10.02.2003 17:55:25','dd.mm.yyyy hh24:mi:ss'));
insert into user_action values( 101 , 1 ,to_date('10.02.2003 17:55:28','dd.mm.yyyy hh24:mi:ss'));
insert into user_action values( 101 , 2 ,to_date('10.02.2003 17:55:39','dd.mm.yyyy hh24:mi:ss'));
insert into user_action values( 101 , 3 ,to_date('10.02.2003 17:55:41','dd.mm.yyyy hh24:mi:ss'));
commit;

select
  decode(sign(id3.action_datetime-id2.action_datetime), 1 , 0 , 1 ) act
 from
  (select
      nvl(min(ACTION_DATETIME),to_date('01.01.0001','dd.mm.yyyy')) as action_datetime
    from user_action
    where
      ID_ACTION  =  3 ) id3,
  (select
      nvl(max(ACTION_DATETIME),to_date('01.01.0001','dd.mm.yyyy')) as action_datetime
    from user_action
    where
     ID_ACTION  =  2  ) id2
;

SQLWKS> truncate table user_action;
Предложение обработано.
SQLWKS> insert into user_action values( 101 , 0 ,to_date('05.02.2003 9:09:13','dd.mm.yyyy hh24:mi:ss'));
Обработана  1  строка.
SQLWKS> insert into user_action values( 101 , 1 ,to_date('10.02.2003 17:55:19','dd.mm.yyyy hh24:mi:ss'));
Обработана  1  строка.
SQLWKS> insert into user_action values( 101 , 2 ,to_date('10.02.2003 17:55:25','dd.mm.yyyy hh24:mi:ss'));
Обработана  1  строка.
SQLWKS> insert into user_action values( 101 , 1 ,to_date('10.02.2003 17:55:28','dd.mm.yyyy hh24:mi:ss'));
Обработана  1  строка.
SQLWKS> insert into user_action values( 101 , 2 ,to_date('10.02.2003 17:55:39','dd.mm.yyyy hh24:mi:ss'));
Обработана  1  строка.
SQLWKS> insert into user_action values( 101 , 3 ,to_date('10.02.2003 17:55:41','dd.mm.yyyy hh24:mi:ss'));
Обработана  1  строка.
SQLWKS> commit;
Предложение обработано.
SQLWKS> 
SQLWKS> select
      2 >   decode(sign(id3.action_datetime-id2.action_datetime), 1 , 0 , 1 ) act
      3 >  from
      4 >   (select
      5 >       nvl(min(ACTION_DATETIME),to_date('01.01.0001','dd.mm.yyyy')) as action_datetime
      6 >     from user_action
      7 >     where
      8 >       ID_ACTION  =  3 ) id3,
      9 >   (select
     10 >       nvl(max(ACTION_DATETIME),to_date('01.01.0001','dd.mm.yyyy')) as action_datetime
     11 >     from user_action
     12 >     where
     13 >      ID_ACTION  =  2  ) id2
     14 > ;
ACT       
 ----------
 
          0 
Выбрана  1  строка.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не могу разобраться с запросом...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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