【发布时间】:2025-12-27 02:25:16
【问题描述】:
我应该通过比较销售日期来选择发票表上的购买成本 例子
发票表(约20000行)
| num. | cod_art | date |
---------------------
| 1 | OROK3 | 22/12/2013 |
| 1 | PIZZ4 | 22/12/2013 |
| 1 | MYGO5 | 22/12/2013 |
| 2 | CAND4 | 27/12/2013 |
| 2 | OROK3 | 27/12/2013 |
| 2 | SAGA8 | 27/12/2013 |
| 3 | PIZZ4 | 30/12/2013 |
| 4 | CAND4 | 30/12/2013 |
每个项目的成本表(大约 4000 行)
| cod_art | cost | purchase dt.|
---------------------
| OROK3 | 11.23 | 15/12/2013 |
| OROK3 | 10.55 | 17/12/2013 |
| OROK3 | 12.00 | 24/12/2013 |
| OROK3 | 11.50 | 30/12/2013 |
| PIZZ4 | 2.56 | 10/12/2013 |
| PIZZ4 | 3.00 | 24/12/2013 |
| SAGA8 | 23.45 | 25/12/2013 |
| CAND4 | 1.33 | 31/12/2013 |
预期结果
| num. | cod_art | date || cost | purchase dt.|
---------------------
| 1 | OROK3 | 22/12/2013 || 10.55 | 17/12/2013 |
| 1 | PIZZ4 | 22/12/2013 || 2.56 | 10/12/2013 |
| 1 | MYGO5 | 22/12/2013 || null | null |
| 2 | CAND4 | 27/12/2013 || null | null |
| 2 | OROK3 | 27/12/2013 || 12.00 | 24/12/2013 |
| 2 | SAGA8 | 27/12/2013 || 23.45 | 25/12/2013 |
| 3 | PIZZ4 | 30/12/2013 || 3.00 | 24/12/2013 |
| 4 | CAND4 | 30/12/2013 || null | null |
这是一个可能的解决方案吗?
SELECT *
FROM ( SELECT
*,
dense_rank() over(PARTITION BY idfat,art order by data_purch desc) rn
FROM ( SELECT
i.idfat,i.art,i.data_sale,p.data_purch,p.PRZ
FROM @Invoice i
left join @Purchase p on i.art=p.art
WHERE
data_sale>data_purch
) t
) src
WHERE
rn = 1
什么是最好的解决方案?
【问题讨论】: