powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Join к таблице по условию максимального значения
7 сообщений из 7, страница 1 из 1
Join к таблице по условию максимального значения
    #39326927
RuCosinus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Не могу разобраться, как присоединить таблицу истории.

Что есть:
- есть таблица договоров (contract_table)
- есть таблица истории, в которую пишутся изменения статусов договоров с датой изменения (table_history). Структура следующая
Код: sql
1.
2.
3.
4.
5.
table_history (
id_contract, --ID контракта
history_date, --дата изменений статуса в контракте
history_dateto, --дата до которой действовали изменения (в случае, если действуют до сих пор, то есть больше изменений статуса по этому контракту не было, то проставляется дата 01.01.2150)
contract_status) --собственно сам измененный статус (установленное значение)



Что необходимо:
мне необходимо иметь возможность вытаскивать все договоры с определенным статусом на заданную дату inDate.

Я хотел сделать примерно вот так:
Код: sql
1.
2.
3.
4.
5.
6.
select contract_number
from contract_table ct
left join table_history th on th.id_contract=ct.id_contract 
                          and  th.history_date = (select max(th1.history_date)
                                                  from table_history th1
                                                  where th1.history_date<inDate)


Но oracle мне совершенно предсказуемо так делать запретил.
Изгалялся по разному, но так и не придумал, как мне реализовать то, что я хочу.

Заранее благодарю за любые направления движения для моих мыслей.
...
Рейтинг: 0 / 0
Join к таблице по условию максимального значения
    #39326949
RuCosinus,

RTFF
...
Рейтинг: 0 / 0
Join к таблице по условию максимального значения
    #39327251
RuCosinus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

Спасибо.
...
Рейтинг: 0 / 0
Join к таблице по условию максимального значения
    #39328556
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх,

не знаю, не знаю. KEEP мне роднее
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with contract_table as (
	select level id_contract from dual connect by level <= 5
),
table_history as (
	select 1 id_contract, date'2000-01-01' history_date, 'a' contract_status from dual
	union all select 2, date'2000-01-01', 'b' from dual
	union all select 2, date'2000-02-01', 'c' from dual
	union all select 3, date'2000-01-01', 'd' from dual
	union all select 3, date'2000-01-02', 'e' from dual
	union all select 3, date'2000-02-01', 'f' from dual
	union all select 4, date'2000-03-01', 'g' from dual
)
select ct.id_contract,
		max(th.contract_status) keep (dense_rank last order by th.history_date) as contract_status
	from contract_table ct
		left join table_history th
			on th.id_contract = ct.id_contract
				and th.history_date < date'2000-02-05'
	group by ct.id_contract;


ID_CONTRACTCONTRACT_NUMBER1a2c3f45
...
Рейтинг: 0 / 0
Join к таблице по условию максимального значения
    #39328623
--Eugene--,

ты бы ссылку-то до конца дочитал бы... глядишь, и KEEP свой любимый узрел бы... :)
...
Рейтинг: 0 / 0
Join к таблице по условию максимального значения
    #39328625
--Eugene--Добрый Э - Эх,

не знаю, не знаю. KEEP мне роднееи это.... оно называется first/last, а не keep, ежели чего...
...
Рейтинг: 0 / 0
Join к таблице по условию максимального значения
    #39328809
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх,

да, узрел, простите..

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


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