Я бы хотел вернуть первый ряд только из внутреннего соединения.У меня есть две таблицы:
Строки в TABLE_D и TABLE_E могут иметь одинаковые даты создания, поэтому я сначала получаю MAX (creationdate), а затем MAX (id) из этого набора.Вот мой полный запрос:
</p>
<pre>
SELECT
a.id as A_ID,
b.id as B_ID,
c.id as C_ID,
d.id as D_ID,
e.id as E_ID,
d.CREATIONDATE,
a.REFNUMBER,
a.DATECREATED,
a.INFO,
e.COST,
FROM
TABLE_A a
INNER JOIN TABLE_B b ON (b.id = a.id)
INNER JOIN TABLE_C c ON (c.id = b.id)
INNER JOIN TABLE_D d ON
(
c.i =
(
select
d.id
FROM TABLE_D
WHERE TABLE_D.id = c.id
AND TABLE_D.id =
(
select
max(id)
from TABLE_D t1
where c_id = c.id
and CREATIONDATE =
(
select
max(CREATIONDATE)
from TABLE_D t2
where t2.c_id = t1.c_id
)
)
)
)
INNER JOIN TABLE_E e ON
(
d.i =
(
select
e.d_id
from TABLE_E
where d_id = d.id
AND id =
(
select
max(id)
from e t1
where e.d_id = d.id
and CREATIONDATE =
(
select
max(CREATIONDATE)
from TABLE_E t2
where t2.d_id = t1.d_id
)
)
)
)
</pre>
<p>
Мой подзапрос, чтобы получить все строки с максимальной датой создания, и из-за этого максимальный идентификатор отлично работает, когда я вызываю его сам по себе, но когда я добавляю егок INNER JOIN (см. выше) я получаю строку для каждой совпадающей строки в таблице D и таблице E. Мне нужна одна строка для TABLE_A.id, показывающая только самую последнюю строку из TABLE_D, связанную с TABLE_C, и самую последнюю из TABLE_E, связаннуюс TABLE_D.
Например, идентификаторы в моем наборе результатов на данный момент выглядят так:
</p>
<pre>
--------------------------------------------------------------------------
A_ID B_ID C_ID D_ID E_ID
--------------------------------------------------------------------------
1 101 201 301 401
1 101 201 301 402
1 101 201 301 403
1 101 201 302 404
1 101 201 302 405
1 101 201 302 406
</pre>
<p>
мне нужно вот что: </p>
<pre>
--------------------------------------------------------------------------
A_ID B_ID C_ID D_ID E_ID
--------------------------------------------------------------------------
1 101 201 302 406
</pre>
<p>
Спасибозаранее за вашу помощь.