Sql 如何联接一个表并基于最新日期和其他两列中的条件显示一列?

Sql 如何联接一个表并基于最新日期和其他两列中的条件显示一列?,sql,sql-server,join,Sql,Sql Server,Join,我正在尝试在customerID上连接两个表。我有一个客户信息表和一个购买信息表。在关联表中,我希望有一列显示该客户的最新购买信息。但是,有些客户还没有购买……我希望他们的字段保持空白或空。此外,我只想显示A类采购,而不是B类采购 我找到了一个显示最新记录的解决方案,但如果客户没有记录,我无法使其显示null(它只是将该客户从联接表中完全删除,而不是保留null字段…无论联接类型如何): 选择c.*,p1* 来自客户c 在(c.id=p1.customer\U id)上加入采购p1 左侧外部连接

我正在尝试在customerID上连接两个表。我有一个客户信息表和一个购买信息表。在关联表中,我希望有一列显示该客户的最新购买信息。但是,有些客户还没有购买……我希望他们的字段保持空白或空。此外,我只想显示A类采购,而不是B类采购

我找到了一个显示最新记录的解决方案,但如果客户没有记录,我无法使其显示null(它只是将该客户从联接表中完全删除,而不是保留null字段…无论联接类型如何):

选择c.*,p1*
来自客户c
在(c.id=p1.customer\U id)上加入采购p1
左侧外部连接购买p2开启(c.id=p2.customer_id和
(p1.date
假设我的字段是: customerTable:客户ID、客户名称 purchaseTable:客户ID、采购类型(A或B)、采购价格、采购备注

我希望我的联接表显示: 客户ID、客户名称、购买价格(最近)、购买说明(最近)


对于“我的客户”表中的每个客户,即使他们尚未购买,我只希望为a类购买显示purchasePrice和purchaseNotes,否则该字段保留为空。

使用窗口功能或
应用
。后者:

SELECT c.*, p.*
FROM customer c OUTER APPLY
     (SELECT TOP (1) p.*
      FROM purchase p 
      WHERE p.customer_id = c.id and p.type = 'A'
      ORDER BY date DESC
     ) p;
SELECT c.*, p.*
FROM customer c OUTER APPLY
     (SELECT TOP (1) p.*
      FROM purchase p 
      WHERE p.customer_id = c.id and p.type = 'A'
      ORDER BY date DESC
     ) p;