2

我有带有 id 、 sku 、 amount 、 columns 的产品表。
id 和 sku 是唯一列。

       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 、 balance 的移动
在这个表中只有 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 是否有运动
(所以我需要检查运动表)并通过运动表中的最高 id 找到最后一个运动
并比较余额和金额。
我想得到这个结果

  --------------------------------------                                
      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
任何帮助表示赞赏!
感谢阅读,
阿隆

4

2 回答 2

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

结果

| 货号 | 数量 | 余额 |
--------------------------------------
| 1-13-013-000 | 765 | 765 |
| 4-670-140-NB12 | 第864章 811 |
| 4-670-153f-NS16 | 912 | (空) |
| 5-616-40 | 86 | 86 |

看到它在行动

于 2013-01-12T19:55:12.433 回答
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
于 2013-01-12T20:07:47.140 回答