Sql server 在最近日期具有案例条件的左侧外部联接

Sql server 在最近日期具有案例条件的左侧外部联接,sql-server,Sql Server,我有两张桌子: dbo.Order PK_Order FK_Customer OrderDate Total 1 1 2020-01-20 150.00 2 1 2020-01-25 200.00 dbo.Customer: PK_Customer Name Age 1 John Miller 25 2 Max Monroe

我有两张桌子:

dbo.Order

PK_Order    FK_Customer OrderDate   Total
1           1           2020-01-20  150.00
2           1           2020-01-25  200.00

dbo.Customer:

PK_Customer Name            Age
1           John Miller     25
2           Max Monroe      28
我想合并这两个表,但当客户有多个订单时,只应合并具有最新日期的订单。这将是连接这两者的初始代码:

SELECT * 
FROM dbo.Customer as Customer
LEFT OUTER JOIN dbo.Order 
ON Customer.PK_Customer = dbo.Order.FK_Customer

我从未在查询中处理过案例条件。有人能给我一个提示吗?

我喜欢用带领带的
TOP 1解决以下问题:

SELECT TOP 1 WITH TIES *
FROM dbo.Customer c
LEFT OUTER JOIN o
    ON c.PK_Customer = o.FK_Customer
ORDER BY
    ROW_NUMBER() OVER (PARTITION BY c.PK_Customer ORDER BY o.OrderDate DESC);

您可以将“仅加入”记录保留为最新日期:

--CREATE TABLE [Order]
--(
--  PK_Order int,
--  FK_Customer int,
--  OrderDate date,
--  Total decimal(10,2)
--)
--INSERT [Order] VALUES
--(1,1,'2020-01-20',150),
--(2,1,'2020-01-25',200)

--CREATE TABLE Customer
--(
--  PK_Customer int,
--  Name nvarchar(20),
--  Age int
--)
--INSERT [Customer] VALUES
--(1,'John Miller',25),
--(2,'Max Monroe',28)

SELECT * 
FROM dbo.Customer C
LEFT OUTER JOIN dbo.[Order] O
  ON C.PK_Customer = O.FK_Customer
 AND OrderDate=(SELECT MAX(OrderDate) FROM [Order] WHERE [Order].FK_Customer=O.FK_Customer)
注1:由于近期可能有许多订单,我保留所有订单


注2:保持年龄不是一个好主意-它必须每年更新。保留出生日期。

这与Tim的答案类似,但不同之处在于分区依据位于orders表中,并且每一位客户在第1行加入

select * from #Customer c 
left join 
(select ROW_NUMBER() over (partition by FK_Customer order by OrderDate desc) as order_NUM,
        PK_Order,
        FK_Customer,
        OrderDate,
        Total from #Order
    ) o on c.PK_Customer = o.FK_Customer and order_NUM = 1
     order by c.PK_Customer, o.OrderDate desc