gpt4 book ai didi

sql - 最快日期有条件加入 - SQL Server 2017

转载 作者:行者123 更新时间:2023-12-04 21:56:46 25 4
gpt4 key购买 nike

我正在处理两个表:

tblOrders

| Part | Order |
|:----:|:-----:|
| AXXA | 10122 |
| AXXA | 10125 |
| AXXB | 10244 |
| AXXB | 10254 |
| AXXB | 10259 |

tblPOs

| rOrder |  PONum  |   PODate   |
|:------:|:-------:|:----------:|
| 10122 | PO99283 | 2/6/2020 |
| 10125 | PO99283 | 2/6/2020 |
| 10244 | PO99455 | 3/22/2020 |
| 10244 | PO99456 | 3/11/2020 |
| 10254 | PO99019 | 1/22/2020 |
| 10259 | PO99122 | 12/22/2020 |
| 10259 | PO99122 | 1/2/2021 |

我正在尝试连接这两个表,并为每个订单选择最早到达日期的 PO(如果有多个)。

因此对于订单号 10244,它有两个 PO,PO99455PO99456。我希望 PO99456 关联,因为它的日期 03/11/2020 早于 PO9945503 日期/22/2020

理想的结果数据集如下所示:

| PartNum | OrderNum |  PONum  |   PODate   |
|:-------:|:--------:|:-------:|:----------:|
| AXXA | 10122 | PO99283 | 2/6/2020 |
| AXXA | 10125 | PO99283 | 2/6/2020 |
| AXXB | 10244 | PO99456 | 3/11/2020 |
| AXXB | 10254 | PO99019 | 1/22/2020 |
| AXXB | 10259 | PO99122 | 12/22/2020 |

目前,我已经写了:

SELECT
a.PartNum,
a.OrderNum,
b.PONum,
MAX(b.PODate) AS PODate

FROM
tblOrders a
LEFT JOIN tblPOs b ON a.OrderNum = b.rOrderNum

GROUP BY
a.PartNum,
a.OrderNum,
b.PONum

产生:

PartNum     OrderNum    PONum   PODate
AXXA 10122 PO99283 2020-02-05
AXXA 10125 PO99283 2020-02-05
AXXB 10244 PO99455 2020-03-21
AXXB 10244 PO99456 2020-03-10
AXXB 10254 PO99019 2020-01-21
AXXB 10259 PO99122 2021-01-01

我已经用这个演示设置了一个 SQL FIDDLE。如何更改我的查询以获得所需的结果?

最佳答案

使用OUTER APPLY:

SELECT o.*, po.*
FROM tblOrders o OUTER APPLY
(SELECT TOP (1) po.*
FROM tblPOs p
WHERE p.OrderNum = o.rOrderNum
ORDER BY PODate ASC
) po

关于sql - 最快日期有条件加入 - SQL Server 2017,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60099641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com