Я хотел бы вернуть первую строку только из внутреннего соединения. У меня есть две таблицы:Нужно, чтобы одна строка возвращалась только из INNER JOIN
TABLE_X | TABLE_Y
id | id creationdate xid
1 | 1 01/01/2011 1
2 | 2 01/01/2011 1
3 | 3 31/12/2010 2
4 | 4 28/12/2010 3
строк таблицы Y могут иметь идентичные создание даты, поэтому я первым получать MAX (CreationDate), а затем затем MAX (ID) из этого набора, например:
SELECT a.id,
c.id,
d.id,
e.id,
d.CREATIONDATE,
a.REFNUMBER,
a.DATECREATED,
a.DESCRIPTION,
e.CATEGORYCODE,
e.OUTSTANDINGAM_MONAMT,
e.PREVPAIDAMOUN_MONAMT,
e.TOTALINCURRED_MONAMT,
e.LOSSFROMDATE,
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
)
)
)
)
Это работает, когда я называю его по себе, но когда я добавляю его в INNER JOIN Я получаю строку для каждой соответствующей строки в таблице Y.
То, что я хочу, это последняя запись по CreationDate и ид, где XID = id из TABLE_X.
Можете ли вы показать нам свою попытку внутреннего соединения? –
Что сказал Марсело. Проблема, вероятно, заключается в самом JOIN. Например, присоединяетесь ли вы к id или MAX (id)? –
MAX (id) - это столбец идентификатора от X или Y? –