I would like to return the first row only from the inner join. I have two tables:
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
Strings in TABLE Y can have identical creation dates, so I get MAX (createdate) first and then MAX (id) from this set, for example:
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 ( ci = ( 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 ( di = ( 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 ) ) ) )
This works when I call it myself, but when I add it to the INNER JOIN, I get a row for each corresponding row in table Y.
What I want is the last createdate and id entry, where xid = id from TABLE_X.
adamdunne
source share