如何在连接时仅返回最新记录

drc*_*c15 5 sql oracle greatest-n-per-group

我正在加入桌子。我只想根据日期字段从连接表返回一条记录。

这是我迄今为止所做的简化的小提琴:http://sqlfiddle.com/#!3/be0cdd/ 2

我的桌子:

  CUSTOMER

| CustomerID |
--------------
| 1          |


  PURCHASE

| PurchaseID | CustomerID | ProductID | CreateDate | ArchiveFlag |
------------------------------------------------------------------
| 1          | 1          | 443       | 01-FEB-15  | F           |
| 2          | 1          | 551       | 01-MAR-15  | F           |
| 3          | 1          | 151       | 01-JAN-15  | F           |
| 4          | 1          | 654       | 01-MAY-15  | T           |
| 5          | 1          | 345       | 01-APR-15  | T           |
Run Code Online (Sandbox Code Playgroud)

这是查询本身:

select *
from customer c
join purchase p
on c.customerid = p.customerid
and p.archiveflag = 'F';
Run Code Online (Sandbox Code Playgroud)

我只想为每个客户返回未存档的最新购买(在本例中为购买 ID 2)。

理想输出:

| CustomerID | PurchaseID | CustomerID_2 | ProductID | CreateDate | ArchiveFlag |
|--------------------------------------------------------------------------------
| 1          | 2          | 1            | 551       | 01-MAR-15  | F           |
Run Code Online (Sandbox Code Playgroud)

Muk*_*ude -1

您可以在查询中使用 top 和 order by ,如下所示

select Top 1 *
from customer c
join purchase p
on c.customerid = p.customerid
and p.archiveflag = 'F' 
Order by p.CreateDate Desc;
Run Code Online (Sandbox Code Playgroud)