Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.misc -> 'SELECT MAX' subquery problem
My Oracle 9i db table structure is:
Members (sysid(PK), classid, personalid, firstname, surname, dateofbirth, deleted)
Education (qualificationid(PK), personalid(FK), qualificationtype, qualificationtitle, yearobtained)
Terminations (terminationid(PK), sysid(FK), contractstatus, statusdate)
I'm trying to select all the members who are assigned to a particular class (12345) and who have not been removed from that class (I keep a record of students that are removed from each class). The query below returns 0 results when there should be at least 3 (I set up the test data so that there would be a number of 'removed' and 'active' students).
SELECT m.sysid, m.classid, m.personalid, m.firstname, m.surname, m.dateofbirth, e.qualificationtype, e.qualificationtitle, e.yearobtained, t.contractstatus, TO_CHAR (t.statusdate, 'YYYY/MM/DD') AS statusdate FROM members m, education e, terminations t WHERE (m.deleted = 'No') AND ( (m.personalid = e.personalid(+)) AND (m.sysid = t.sysid(+)) AND (t.contractstatus <> 'Removed') AND (m.classid = '12345') AND (t.statusdate = (SELECT MAX (t.statusdate) FROM terminations t WHERE t.sysid = m.sysid)) ) GROUP BY m.sysid, m.classid, m.personalid, m.firstname, m.surname, m.dateofbirth, e.qualificationtype, e.qualificationtitle, e.yearobtained, t.contractstatus, t.statusdate
The 'terminations' table does not contain any records for a student until he/she is 'removed' from the class or 'reassigned' to the class. All students are initially automatically assigned to the class and are members of just this one class.
I think the problem is with the 'SELECT MAX' subquery, but what? Received on Thu Feb 17 2005 - 04:56:52 CST