powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Научите как написать запрос пжл
18 сообщений из 18, страница 1 из 1
Научите как написать запрос пжл
    #40103427
Anitik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Помогите, пожалуйста, умным советом.
У идентификатора ID есть три атрибута: A, B и C. История изменения каждого атрибута лежит в своей таблице.

Например:
ID A1 a_start_date_1 a_end_date_1
ID A2 a_start_date_2 a_end_date_2

ID B1 b_start_date_1 b_end_date_1
ID B2 b_start_date_2 b_end_date_2

ID C1 c_start_date_1 c_end_date_1
ID C2 c_start_date_2 c_end_date_2

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

...
ID A1 B1 C1 a_start_date_1 b_end_date_1
ID A1 B2 C1 b_start_date_2 c_end_date_1
...

Любой PL/SQL запрещен.
Намекните, пожалуйста, как это сделать?

Спасибо!
...
Рейтинг: 0 / 0
Научите как написать запрос пжл
    #40103454
igaraev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anitik,

select * from a1 where id=:id
union all
select * from b1 where id=:id
union all
select * from c1 where id=:id
...
Рейтинг: 0 / 0
Научите как написать запрос пжл
    #40103480
Anitik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
igaraev
Anitik,

select * from a1 where id=:id
union all
select * from b1 where id=:id
union all
select * from c1 where id=:id


Извините, это Вы так пошутили? : ))

Нужно отследить непротиворечивость дат в каждой строке окончательной таблицы.
...
Рейтинг: 0 / 0
Научите как написать запрос пжл
    #40103488
igaraev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anitik,

Я не пошутил. Если нужно добавить даты это не сложно сделать.
...
Рейтинг: 0 / 0
Научите как написать запрос пжл
    #40103514
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anitik
Добрый день!

Помогите, пожалуйста, умным советом.
У идентификатора ID есть три атрибута: A, B и C. История изменения каждого атрибута лежит в своей таблице.

Например:
ID A1 a_start_date_1 a_end_date_1
ID A2 a_start_date_2 a_end_date_2

ID B1 b_start_date_1 b_end_date_1
ID B2 b_start_date_2 b_end_date_2

ID C1 c_start_date_1 c_end_date_1
ID C2 c_start_date_2 c_end_date_2

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

...
ID A1 B1 C1 a_start_date_1 b_end_date_1
ID A1 B2 C1 b_start_date_2 c_end_date_1
...

Любой PL/SQL запрещен.
Намекните, пожалуйста, как это сделать?

Спасибо!


ничего не понял
авторлежит в своей таблице.
для каждого атрибута своя таблица (три таблицы)?
авторна любой момент времени
дырок нет?

авторID A1 B1 C1 a_start_date_1 b_end_date_1
по какому принцыпу выбраны даты?

авторнесколько строчек вида:
раз строчек не одна, зачит есть пересечения интервалов в истории изменений
(несколько значений на момент времени)?

зы
покажите на примере данных
with t as(
select ...
)

.....
stax
...
Рейтинг: 0 / 0
Научите как написать запрос пжл
    #40103532
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anitik,

Даже Stax ругаться стал!

Мессир, на сайте с 2012 года, а правила даже не открывал
памятка:
HOWTO :: Как правильно задавать вопросы
Как мне оформить свое сообщение?
Студентам, желающим помощи

1) Полная постановка задачи (без сокращений)

2) Подготовьте тестовые данные, лучше в виде with
пример (не ваш случай) в конце

3) Покажите что сделали, что получили, без сокращений. ( лучше не в виде screenshot)

4) используйте Тэги, читать код без них неудобно, правильно оформляйте сообщение

Пример подготовленных данных, запроса и вывода.
Код: 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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
-- table 1 with column list
with user_tab(user_id,user_name,registry_date) as (
select 1,'Bob',to_date('11.02.1921 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual union all
select 2,'Max',to_date('11.02.1922 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual union all
select 3,'Jon',to_date('11.02.1923 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual
)
-- table 2 with column list
,user_post(post_id,user_id,parent_post_id,post_date,message) as (
select 100,1,null,to_date('11.02.1923 23:04:00','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 101,2,100,to_date('11.02.1923 23:05:23','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 102,3,100,to_date('11.02.1923 23:05:35','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 103,1,102,to_date('11.02.1923 23:06:00','DD.MM.YYYY HH24:MI:SS'),'How are you' from dual union all
select 104,2,102,to_date('11.02.1923 23:07:05','DD.MM.YYYY HH24:MI:SS'),'All right!' from dual union all
select 105,1,101,to_date('11.02.1923 23:06:21','DD.MM.YYYY HH24:MI:SS'),'Bye' from dual union all
select 106,1,104,to_date('11.02.1923 23:04:37','DD.MM.YYYY HH24:MI:SS'),'Bye' from dual union all
select 107,2,null,to_date('11.02.1923 23:08:56','DD.MM.YYYY HH24:MI:SS'),'Hmm' from dual
)
select
rpad(to_char(p.post_date,'YYYY-MM-DD HH24:MI:SS  '),20+level*2,' ')||u.user_name||': '||p.message as txt
from 
 user_post p
 join user_tab  u on ( p.user_id = u.user_id)
where p.post_date >= u.registry_date
start with p.parent_post_id is null 
connect by prior p.post_id=p.parent_post_id 
;

TXT
--------------------------------------------------------------------------------
1923-02-11 23:04:00   Bob: Hi
1923-02-11 23:05:23     Max: Hi
1923-02-11 23:06:21       Bob: Bye
1923-02-11 23:05:35     Jon: Hi
1923-02-11 23:06:00       Bob: How are you
1923-02-11 23:07:05       Max: All right!
1923-02-11 23:04:37         Bob: Bye
1923-02-11 23:08:56   Max: Hmm

8 rows selected.
...
Рейтинг: 0 / 0
Научите как написать запрос пжл
    #40103533
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anitik
показывает состояние каждого атрибута на любой момент времени
Что значит "показывает на любой момент времени"? Нужно вывести по строке данных на каждый "момент времени"? Или по одной строке на каждый момент, когда значение менялось?
...
Рейтинг: 0 / 0
Научите как написать запрос пжл
    #40103537
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejnin
Anitik,

Даже Stax ругаться стал!


я не ругался

Утро, понедельник, не пробудился еще и не понял что надо то

.....
stax
...
Рейтинг: 0 / 0
Научите как написать запрос пжл
    #40103667
Anitik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пардон муа!

Код: 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.
29.
30.
-- таблицы с исходными данными
create table tmp_id
(id_val number);

create table tmp_a
(id_val number,
 atr_val varchar2(10),
 start_date date,
 end_date date);
 
create table tmp_b
(id_val number,
 atr_val varchar2(10),
 start_date date,
 end_date date);
 
create table tmp_c
(id_val number,
 atr_val varchar2(10),
 start_date date,
 end_date date); 
 
-- итоговая таблица 
create table tmp_res
(id_val number,
 a_atr_val varchar2(10),
 b_atr_val varchar2(10),
 c_atr_val varchar2(10),
 start_date date,
 end_date date);  



Код: 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.
29.
30.
31.
32.
33.
34.
-- заполним таблицы с исходными данными
 
insert into tmp_id (id_val) values (1);
commit;

insert into tmp_a (id_val, atr_val, start_date, end_date)
values (1, 'A1', to_date('01.01.2020','dd.mm.yyyy'), to_date('01.02.2020','dd.mm.yyyy'));
commit;
insert into tmp_a (id_val, atr_val, start_date, end_date)
values (1, 'A2', to_date('01.02.2020','dd.mm.yyyy'), to_date('01.03.2020','dd.mm.yyyy'));
commit;
insert into tmp_a (id_val, atr_val, start_date, end_date)
values (1, 'A3', to_date('01.03.2020','dd.mm.yyyy'), to_date('01.04.2020','dd.mm.yyyy'));
commit;

insert into tmp_b (id_val, atr_val, start_date, end_date)
values (1, 'B1', to_date('10.01.2020','dd.mm.yyyy'), to_date('10.02.2020','dd.mm.yyyy'));
commit;
insert into tmp_a (id_val, atr_val, start_date, end_date)
values (1, 'B2', to_date('10.02.2020','dd.mm.yyyy'), to_date('10.03.2020','dd.mm.yyyy'));
commit;
insert into tmp_a (id_val, atr_val, start_date, end_date)
values (1, 'B3', to_date('10.03.2020','dd.mm.yyyy'), to_date('10.04.2020','dd.mm.yyyy'));
commit;

insert into tmp_c (id_val, atr_val, start_date, end_date)
values (1, 'C1', to_date('20.01.2020','dd.mm.yyyy'), to_date('20.02.2020','dd.mm.yyyy'));
commit;
insert into tmp_c (id_val, atr_val, start_date, end_date)
values (1, 'C2', to_date('20.02.2020','dd.mm.yyyy'), to_date('20.03.2020','dd.mm.yyyy'));
commit;
insert into tmp_c (id_val, atr_val, start_date, end_date)
values (1, 'C3', to_date('20.03.2020','dd.mm.yyyy'), to_date('20.04.2020','dd.mm.yyyy'));
commit;



Вот, что должно получиться в итоге в этом простом примере (надеюсь, не накосячила):

Код: 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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
-- итог
insert into tmp_res (id_val, a_atr_val, start_date, end_date)
values (1, 'A1', to_date('01.01.2020','dd.mm.yyyy'), to_date('10.01.2020','dd.mm.yyyy'));
commit;

insert into tmp_res (id_val, a_atr_val, b_atr_val, start_date, end_date)
values (1, 'A1', 'B1', to_date('10.01.2020','dd.mm.yyyy'), to_date('20.01.2020','dd.mm.yyyy'));
commit;

insert into tmp_res (id_val, a_atr_val, b_atr_val, c_atr_val, start_date, end_date)
values (1, 'A1', 'B1', 'C1', to_date('20.01.2020','dd.mm.yyyy'), to_date('01.02.2020','dd.mm.yyyy'));
commit;

insert into tmp_res (id_val, a_atr_val, b_atr_val, c_atr_val, start_date, end_date)
values (1, 'A2', 'B1', 'C1', to_date('01.02.2020','dd.mm.yyyy'), to_date('10.02.2020','dd.mm.yyyy'));
commit;

insert into tmp_res (id_val, a_atr_val, b_atr_val, c_atr_val, start_date, end_date)
values (1, 'A2', 'B2', 'C1', to_date('10.02.2020','dd.mm.yyyy'), to_date('20.02.2020','dd.mm.yyyy'));
commit;

insert into tmp_res (id_val, a_atr_val, b_atr_val, c_atr_val, start_date, end_date)
values (1, 'A2', 'B2', 'C2', to_date('20.02.2020','dd.mm.yyyy'), to_date('01.03.2020','dd.mm.yyyy'));
commit;

insert into tmp_res (id_val, a_atr_val, b_atr_val, c_atr_val, start_date, end_date)
values (1, 'A3', 'B2', 'C2', to_date('01.03.2020','dd.mm.yyyy'), to_date('10.03.2020','dd.mm.yyyy'));
commit;

insert into tmp_res (id_val, a_atr_val, b_atr_val, c_atr_val, start_date, end_date)
values (1, 'A3', 'B3', 'C2', to_date('10.03.2020','dd.mm.yyyy'), to_date('20.03.2020','dd.mm.yyyy'));
commit;

insert into tmp_res (id_val, a_atr_val, b_atr_val, c_atr_val, start_date, end_date)
values (1, 'A3', 'B3', 'C3', to_date('20.03.2020','dd.mm.yyyy'), to_date('01.04.2020','dd.mm.yyyy'));
commit;

insert into tmp_res (id_val, b_atr_val, c_atr_val, start_date, end_date)
values (1, 'B3', 'C3', to_date('01.04.2020','dd.mm.yyyy'), to_date('10.04.2020','dd.mm.yyyy'));
commit;

insert into tmp_res (id_val, c_atr_val, start_date, end_date)
values (1, 'C3', to_date('10.04.2020','dd.mm.yyyy'), to_date('20.04.2020','dd.mm.yyyy'));
commit;




Дырки могут быть, т.е. есть периоды времени, когда какой-то атрибут не задан. Это тоже нужно показать в итоговой таблице.
И, как видите, end_date предыдущей записи и start_date следующей записи обычно совпадают.
...
Рейтинг: 0 / 0
Научите как написать запрос пжл
    #40103676
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hmm...
авторУ идентификатора ID есть три атрибута: A, B и C. История изменения каждого атрибута лежит в своей таблице.


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
--
insert into tmp_b (id_val, atr_val, start_date, end_date)
values (1, 'B1', to_date('10.01.2020','dd.mm.yyyy'), to_date('10.02.2020','dd.mm.yyyy'));
--
insert into tmp_a (id_val, atr_val, start_date, end_date)
values (1, 'B2', to_date('10.02.2020','dd.mm.yyyy'), to_date('10.03.2020','dd.mm.yyyy'));
--
insert into tmp_a (id_val, atr_val, start_date, end_date)
values (1, 'B3', to_date('10.03.2020','dd.mm.yyyy'), to_date('10.04.2020','dd.mm.yyyy'));
--


Точно изменения атрибута B2 в таблице tmp_a?

А так для тестирования можно было сделать так:


тестовые данные:
Код: 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.
29.
30.
31.
32.
33.
34.
with
 tmp_id (id_val) as (select 1 from dual)
,tmp_a (id_val, atr_val, start_date, end_date) as (
select 1, 'A1', to_date('01.01.2020','dd.mm.yyyy'), to_date('01.02.2020','dd.mm.yyyy') from dual union all
select 1, 'A2', to_date('01.02.2020','dd.mm.yyyy'), to_date('01.03.2020','dd.mm.yyyy') from dual union all
select 1, 'A3', to_date('01.03.2020','dd.mm.yyyy'), to_date('01.04.2020','dd.mm.yyyy') from dual
)
,tmp_b (id_val, atr_val, start_date, end_date) as (
select 1, 'B1', to_date('10.01.2020','dd.mm.yyyy'), to_date('10.02.2020','dd.mm.yyyy') from dual union all
select 1, 'B2', to_date('10.02.2020','dd.mm.yyyy'), to_date('10.03.2020','dd.mm.yyyy') from dual union all
select 1, 'B3', to_date('10.03.2020','dd.mm.yyyy'), to_date('10.04.2020','dd.mm.yyyy') from dual
)
,tmp_c (id_val, atr_val, start_date, end_date) as (
select 1, 'C1', to_date('20.01.2020','dd.mm.yyyy'), to_date('20.02.2020','dd.mm.yyyy') from dual union all
select 1, 'C2', to_date('20.02.2020','dd.mm.yyyy'), to_date('20.03.2020','dd.mm.yyyy') from dual union all
select 1, 'C3', to_date('20.03.2020','dd.mm.yyyy'), to_date('20.04.2020','dd.mm.yyyy') from dual
)
,t_all as (
select * from tmp_a union all
select * from tmp_b union all
select * from tmp_c
)
select * from t_all;
    ID_VAL ATR_VA START_DATE END_DATE
---------- ------ ---------- ----------
	 1 A1	  01.01.2020 01.02.2020
	 1 A2	  01.02.2020 01.03.2020
	 1 A3	  01.03.2020 01.04.2020
	 1 B1	  10.01.2020 10.02.2020
	 1 B2	  10.02.2020 10.03.2020
	 1 B3	  10.03.2020 10.04.2020
	 1 C1	  20.01.2020 20.02.2020
	 1 C2	  20.02.2020 20.03.2020
	 1 C3	  20.03.2020 20.04.2020



Ожидаемый Результат:
1'A1''01.01.2020''10.01.2020'1'A1''B1''10.01.2020''20.01.2020'1'A1''B1''C1''20.01.2020''01.02.2020'1'A2''B1''C1''01.02.2020''10.02.2020'1'A2''B2''C1''10.02.2020''20.02.2020'

Но видимо после работы не варит голова
как связаны A1 и A2? Это один атрибут?
и куда делся A3 в результате?
...
Рейтинг: 0 / 0
Научите как написать запрос пжл
    #40103681
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда, не разработчик я...
Маладой Кракадил Подскажите где туплю?
Вроде все разрисовал, но без least/case/greatest получается
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
ID_A   ID_B   ID_C   DT1	DT2
------ ------ ------ ---------- ----------
A1		     01.01.2020 10.01.2020
B1     A1	     10.01.2020 20.01.2020
C1     B1     A1     20.01.2020 01.02.2020
A2     C1     B1     01.02.2020 10.02.2020
B2     A2     C1     10.02.2020 20.02.2020
C2     B2     A2     20.02.2020 01.03.2020
A3     C2     B2     01.03.2020 10.03.2020
B3     A3     C2     10.03.2020
C3     B3     A3     20.03.2020

9 rows selected.



Вот и влепил с досады молодого крокодила...
Код: 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.
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.
with
 tmp_id (id_val) as (select 1 from dual)
,tmp_a (id_val, atr_val, start_date, end_date) as (
select 1, 'A1', to_date('01.01.2020','dd.mm.yyyy'), to_date('01.02.2020','dd.mm.yyyy') from dual union all
select 1, 'A2', to_date('01.02.2020','dd.mm.yyyy'), to_date('01.03.2020','dd.mm.yyyy') from dual union all
select 1, 'A3', to_date('01.03.2020','dd.mm.yyyy'), to_date('01.04.2020','dd.mm.yyyy') from dual
)
,tmp_b (id_val, atr_val, start_date, end_date) as (
select 1, 'B1', to_date('10.01.2020','dd.mm.yyyy'), to_date('10.02.2020','dd.mm.yyyy') from dual union all
select 1, 'B2', to_date('10.02.2020','dd.mm.yyyy'), to_date('10.03.2020','dd.mm.yyyy') from dual union all
select 1, 'B3', to_date('10.03.2020','dd.mm.yyyy'), to_date('10.04.2020','dd.mm.yyyy') from dual
)
,tmp_c (id_val, atr_val, start_date, end_date) as (
select 1, 'C1', to_date('20.01.2020','dd.mm.yyyy'), to_date('20.02.2020','dd.mm.yyyy') from dual union all
select 1, 'C2', to_date('20.02.2020','dd.mm.yyyy'), to_date('20.03.2020','dd.mm.yyyy') from dual union all
select 1, 'C3', to_date('20.03.2020','dd.mm.yyyy'), to_date('20.04.2020','dd.mm.yyyy') from dual
)
,t_all as (
select * from tmp_a union all
select * from tmp_b union all
select * from tmp_c
)
,t_res as (select 
atr_val as id_a
,lag(atr_val,1) over (order by start_date) as id_b
,lag(atr_val,2) over (order by start_date) as id_c
,start_date as dt1
,least (lead(start_date,1) over (order by start_date),lead(start_date,2) over (order by start_date)) dt2
from t_all
where start_date < end_date
order by start_date
)
select
 least (nvl(id_a,'ZZ'),nvl(id_b,'ZZ'),nvl(id_c,'ZZ')) as aa
,case 
when substr(nvl(id_a,' '),1,1) = 'B' then id_a
when substr(nvl(id_b,' '),1,1) = 'B' then id_b
when substr(nvl(id_c,' '),1,1) = 'B' then id_c
end as ab
,greatest (id_a,id_b,id_c) as ac
,dt1
,dt2
from t_res
;

AA     AB     AC     DT1	DT2
------ ------ ------ ---------- ----------
A1		     01.01.2020 10.01.2020
A1     B1	     10.01.2020 20.01.2020
A1     B1     C1     20.01.2020 01.02.2020
A2     B1     C1     01.02.2020 10.02.2020
A2     B2     C1     10.02.2020 20.02.2020
A2     B2     C2     20.02.2020 01.03.2020
A3     B2     C2     01.03.2020 10.03.2020
A3     B3     C2     10.03.2020
A3     B3     C3     20.03.2020

9 rows selected.
...
Рейтинг: 0 / 0
Научите как написать запрос пжл
    #40103683
Anitik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, накосячила немного с исходными данными, спасибо, что поправили!
(не увидела кнопочки "Редактировать сообщение", есть такая?)
...
Рейтинг: 0 / 0
Научите как написать запрос пжл
    #40103685
Anitik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такой таблички я, конечно, не смогу себе позволить:

select * from tmp_a union all
select * from tmp_b union all
select * from tmp_c

Потому что в реальности tmp_a, tmp_b и tmp_c - очень большие.
...
Рейтинг: 0 / 0
Научите как написать запрос пжл
    #40103709
igaraev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anitik,

Если вы ищете по одному ID, то мой вариант предложенный ранее будет работать быстро.
А если вы вначале будите объединять таблички а потом искать ID то возможно и долго.
...
Рейтинг: 0 / 0
Научите как написать запрос пжл
    #40103727
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anitik
Вот такой таблички я, конечно, не смогу себе позволить:

select * from tmp_a union all
select * from tmp_b union all
select * from tmp_c

Потому что в реальности tmp_a, tmp_b и tmp_c - очень большие.


Вам надо "на любой момент времени"

поетому

select * from tmp_a where start_date<=:v_moment and end_date > :v_moment union all
select * from tmp_b where start_date<=:v_moment and end_date > :v_moment union all
select * from tmp_c where start_date<=:v_moment and end_date > :v_moment

ето уже не миллионы, а скажем сотни

получим задачку на пересечение интервалов ,
на форуме решалась очень часто, есть много вариантов (даж с рисунками)

конкретно в Вашем случае А В С можно считать, что ето напр цвета (красный синий зеленый)

если интевальчики пересекаются получим микс, напр АС
со строками работать чутку тяжелее, чем с числами

для упрощения можно принять А=1 В=10 С=100
тогда
А пересекается с С --> 1+100=101
В пересекается с С --> 10+100=110
и тд

зы
в древних версиях, економили, и часто использовали биты

....
stax
...
Рейтинг: 0 / 0
Научите как написать запрос пжл
    #40103734
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вдогонку

часто такие задачи ставят не "на момент времени",
а за период (декада, месяц, квартал)
с даты, по дату

.....
stax
...
Рейтинг: 0 / 0
Научите как написать запрос пжл
    #40103745
Anitik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое всем за советы и помощь!
...
Рейтинг: 0 / 0
Научите как написать запрос пжл
    #40105297
ChrisChris23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, это мне очень помогло.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Научите как написать запрос пжл
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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