我有产品表,其中包含id,sku,amount,columns id和sku是Unique列。
products table
---------------------------
sku | amount
----------------|----------
1-13-013-000 | 765.00
4-670-140-NB12 | 864.00
4-670-153f-NS16 | 912.00
5-616-40 | 86.00
另一张桌子是带有id,sku,余额
的运动
在此表中,只有id是唯一的。
movements table
id | sku | balance
---|----------------|----------
1 | 5-51-51 | 765.00
2 | 5-616-40 | 11.00
3 | 5-704-40 | 709.00
4 | 5-616-40 | 67.00
5 | 1-13-013-000 | 414.00
6 | 5-704-40 | 415.00
7 | 4-670-140-NB12| 313.00
8 | 5-616-40 | 79.00
9 | 1-83-019-2 | 11.00
10 | 5-616-40 | 86.00
11 | 4-670-140-NB12| 811.00
12 | 1-13-013-000 | 765.00
我想比较并检查产品表上的每个sku是否有运动
(所以我需要检查移动表)并找到最高身份的最后一个动作
在移动表中并比较余额和金额
我想得到这个结果
--------------------------------------
sku | amount | balance
----------------|------------|--------
1-13-013-000 | 765.00 | 765.00
4-670-140-NB12 | 864.00 | 811.00 <- No match
4-670-153f-NS16 | 912.00 | <-no movement
5-616-40 | 86.00 | 79.00
我不需要评论<- No match
和<-no movement
任何帮助表示赞赏!
谢谢你的阅读,
阿隆
答案 0 :(得分:0)
如果您尝试从移动表中获取MAX
,那么结果似乎不正确。
id | sku | balance
---|----------------|----------
1 | 5-51-51 | 765.00
2 | 5-616-40 | 11.00
3 | 5-704-40 | 709.00
4 | 5-616-40 | 67.00
5 | 1-13-013-000 | 414.00
6 | 5-704-40 | 415.00
7 | 4-670-140-NB12| 313.00
8 | 5-616-40 | 79.00
9 | 1-83-019-2 | 11.00
10 | 5-616-40 | 86.00 <-- Max of 5-616-40
11 | 4-670-140-NB12| 811.00 <-- Max of
12 | 1-13-013-000 | 765.00 <-- Max of 1-13-013-000
这应该会给你想要的结果:
SELECT p.sku, p.amount, m.balance
FROM products p
LEFT JOIN
(SELECT sku, MAX(balance) AS balance FROM movements
GROUP BY sku) m ON m.sku = p.sku
<强>结果强>
| SKU | AMOUNT | BALANCE | -------------------------------------- | 1-13-013-000 | 765 | 765 | | 4-670-140-NB12 | 864 | 811 | | 4-670-153f-NS16 | 912 | (null) | | 5-616-40 | 86 | 86 |
答案 1 :(得分:0)
以下代码可以使用:
SELECT
p.Sku,
p.Amount,
m.Balance
FROM
TestMovements AS m
INNER JOIN
(
SELECT
MAX(Id) AS Id
FROM
TestMovements
GROUP BY
Sku
) AS MaxIds
ON
m.Id = MaxIds.Id
RIGHT OUTER JOIN
TestProducts AS p
ON
m.Sku = p.Sku