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

奇迹警告

我正在使用两个表:

tblOrders

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

tblPO

| 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,PO99455并且PO99456我想要PO99456关联,因为它的日期03/11/2020早于PO99455的日期03/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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章