我在 Oracle 10 数据库中有以下表。
列出 ID 和相关日期的 TABLE_A:
ID DATE
-----------------------
A1234 | 31-Dec-2008
B5678 | 31-Dec-2009
A1234 | 31-Dec-2010
TABLE_B 在月末给出 ID 的评级:
ID RATING_DATE RATING
--------------------------------
A1234 | 31-Dec-2008 | 3
A1234 | 31-Jan-2009 | 3
A1234 | 28-Feb-2009 | 3
A1234 | 31-Mar-2009 | 2
A1234 | 30-Apr-2009 | 2
A1234 | 31-May-2009 | 3
A1234 | 31-Jun-2009 | 2
A1234 | 31-Jan-2010 | 3
A1234 | 28-Feb-2010 | 3
B5678 | 31-Dec-2009 | 4
B5678 | 31-Dec-2010 | 4
B5678 | 31-Jan-2011 | 4
B5678 | 28-Feb-2011 | 4
我需要的:
对于 TABLE_A 中的所有ID
,DATE
对,我想在 [DATE, DATE + 12 个月) 范围内找到最新的RATING_DATE
和TABLE_B 中的对。RATING
例如:对于A1234 | 31-Dec-2008
,我有兴趣在 2008 年 12 月 31 日至 2009 年 11 月 30 日之间找到最新的RATING_DATE
。RATING
在这里,我想要A1234 | 31-Jun-2009 | 2
我有以下 SQL 来获取最新的RATING_DATE
,但我不知道如何获取RATING
:
SELECT A.DATE,
A.ID,
MAX(TABLE_B.RATING_DATE)
FROM TABLE_A A LEFT JOIN TABLE_B B
ON
A.ID = B.ID
AND
B.RATING_DATE >= A.DATE
AND
B.RATING_DATE < ADD_MONTHS(A.DATE, 12)
GROUP BY A.DATE,
A.ID
有没有办法在没有嵌套连接或其他子查询的情况下完成这项工作?