Я хотел бы вернуть первую строку только из внутреннего соединения. У меня есть две таблицы:
Строки в TABLE_D и TABLE_E могут иметь одинаковые даты создания, поэтому я сначала получаю MAX (дата создания), а затем MAX (id) из этого набора. Вот мой полный запрос:
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 ) ) ) )
Мой подзапрос для получения всех строк с максимальной датой создания, и поэтому максимальный идентификатор работает нормально, когда я вызываю его сам по себе, но когда я добавляю его во ВНУТРЕННЕЕ СОЕДИНЕНИЕ (см. выше), я получаю строку для каждой соответствующей строки в таблице D и таблица E. Мне нужна одна строка для TABLE_A.id, показывающая только последнюю строку из TABLE_D, связанную с TABLE_C, и последнюю строку из TABLE_E, связанную с TABLE_D.
Например, идентификаторы в моем наборе результатов на данный момент выглядят так:
-------------------------------------------------------------------------- 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
мне нужно вот это:
-------------------------------------------------------------------------- A_ID B_ID C_ID D_ID E_ID -------------------------------------------------------------------------- 1 101 201 302 406
Заранее спасибо за вашу помощь.