我有一个看起来像这样的表:
+---------------------------------------------+
| EVENT_ID | ITEM_ID | PERSON_ID | EVENT_DATE |
+---------------------------------------------+
| 123 | 1 | 2 | 21-AUG-03 |
| 124 | 1 | 3 | 22-AUG-03 |
| 125 | 1 | 45 | 23-AUG-03 |
| 126 | 1 | (null) | 24-AUG-03 |
| 127 | 2 | 2 | 25-AUG-03 |
| 128 | 2 | 6 | 26-AUG-03 |
| 129 | 2 | 1 | 27-AUG-03 |
+---------------------------------------------+
因此,我需要为每个 item_id 获取最新的 (MAX(event_date))、非空 person_id。我们为此提出了一种相当简单的 PL/SQL 方法,但试图用直接的 SQL 来完成这项工作。有人有想法吗?
顺便说一句,event_id 并不总是像这样连续。我们有两个冗余的数据库服务器。
提前谢谢。
以下只需要一次全表扫描。
尝试这个