我应该通过比较销售日期在发票表上选择购买成本 示例
发票表(约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
什么是最佳解决方案?
答案 0 :(得分:0)
如果项目在一天内没有多次购买,那么以下查询可能会帮助您获得结果。
SELECT I.idfat, I.art, I.Data_Sale, P.Data_Sale, p.PRZ
FROM Invoice As I
LEFT JOIN Purchase As P On P.art = I.art
AND P.data_purch =
(SELECT TOP 1 PA.data_purch
FROM Purchase As PA
WHERE PA.art = I.art
AND PA.data_purch <= I.Data_Sale
ORDER BY PA.data_purch Desc
)