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

Откуда:
Сообщений: 39
Есть 2 таблицы: Person(ID, FIO)
100 Иванов И.И.
200 Иванова А.П.
300 Петров А.П.
400 Петрова А.А.
500 Сидорова А.Ф.
600 Сидорова А.К.


и Pairs(IDG, IDM, WEDDING_DATE).

1 100 400 01-FEB-98
2 300 400 02-OCT-00
3 500 600 03-NOV-72

Необходимо вывести:

Иванов И.И. Петрова А.А. 01-FEB-98
Петров А.П.Петрова А.А. 02-OCT-00
Сидорова А.К. 03-NOV-72
1 ноя 18, 23:45    [21722037]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Piastry
Member

Откуда:
Сообщений: 39
Необходимо вывести:

Иванов И.И. Петрова А.А. 01-FEB-98
Петров А.П. Петрова А.А. 02-OCT-00
Сидорова А.Ф. Сидорова А.К. 03-NOV-72


Запрос:

select t1.e.fio, t2.e.fio, t2.wedding_date

from

(select a.id, e.fio, a.wedding_date
from pairs a join person e on a.idg = e.id) t1

left join

(select a.id, e.fio, a.wedding_date
from pairs a join person e on a.idm = e.id) t2

on t1.a.id = t2.a.id



выдает:

ORA-00904: "T2"."A"."ID": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 13 Column: 14
1 ноя 18, 23:48    [21722038]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18399
select g.fio, m.fio, p.wedding_date
  from pairs p
     , person g
     , person m
 where p.idg = g.id
   and p.idm = m.id
2 ноя 18, 00:12    [21722046]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Piastry
Member

Откуда:
Сообщений: 39
Спасибо, работает, но вот как бы сделать так, учитывая что это супружеские пары с датой вступления в брак, оставить только актуальную дату (последнюю)?

Петров А.П. Петрова А.А. 02-OCT-00
Сидоров А.Ф. Сидорова А.К. 03-NOV-72
2 ноя 18, 01:03    [21722056]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Piastry
Member

Откуда:
Сообщений: 39
Всем спасибо! Сам догадался.

select g.fio, m.fio, p.max_wedding_date
from

(select t1.idm, t2.idg, t2.max_wedding_date
from
(select idm, max(wedding_date) as max_wedding_date
from pairs
group by idm)t1
left join
(select idg, max(wedding_date) as max_wedding_date
from pairs
group by idg)t2
on t1.max_wedding_date = t2.max_wedding_date) p

, person g
, person m
where p.idg = g.id
and p.idm = m.id
2 ноя 18, 01:30    [21722057]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
Piastry
Сам догадался.


  1  with Person(ID, FIO) as (
  2  select 100,'Иванов И.И.' from dual union all
  3  select 200,'Иванова А.П.' from dual union all
  4  select 300,'Петров А.П.' from dual union all
  5  select 400,'Петрова А.А.' from dual union all
  6  select 500,'Сидорова А.Ф.' from dual union all
  7  select 600,'Сидорова А.К.' from dual)
  8  ,Pairs(id,IDG, IDM, WEDDING_DATE) as (
  9  select 1,  100,    400,to_date('01-02-98') from dual union all
 10  select 2,  300,    400,to_date('02-10-00') from dual union all
 11  select 3,  500,    600,to_date('02-10-00') from dual )
 12  select g.fio, m.fio, p.max_wedding_date
 13  from
 14  (select t1.idm, t2.idg, t2.max_wedding_date
 15  from
 16  (select idm, max(wedding_date) as max_wedding_date
 17  from pairs
 18  group by idm)t1
 19  left join
 20  (select idg, max(wedding_date) as max_wedding_date
 21  from pairs
 22  group by idg)t2
 23  on t1.max_wedding_date = t2.max_wedding_date) p
 24  , person g
 25  , person m
 26  where p.idg = g.id
 27* and p.idm = m.id
 28  /

FIO           FIO           MAX_WEDD
------------- ------------- --------
Сидорова А.Ф. Сидорова А.К. 02.10.00
Сидорова А.Ф. Петрова А.А.  02.10.00
Петров А.П.   Сидорова А.К. 02.10.00
Петров А.П.   Петрова А.А.  02.10.00


.....
stax
2 ноя 18, 09:49    [21722174]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить