什么查询在MySQL上获得以下内容

什么查询在MySQL上获得以下内容

用户

+--------+--------------+----------+--------------+
| userID | userUsername | userName | userLastName |
+--------+--------------+----------+--------------+
|      6 | richard      | Ricardo  | Vega         |
|     10 | jason        | Jason    | Bourne       |
+--------+--------------+----------+--------------+

补充库存
+-----------+-------------+--------+--------+-----------------+
| restockID | restockDate | itemID | userID | restockQuantity |
+-----------+-------------+--------+--------+-----------------+
|         1 | 2012-02-29  |      1 |      6 |              48 |
|         2 | 2012-02-29  |      1 |     10 |             100 |
|         3 | 2012-02-29  |      2 |     10 |              50 |
|         4 | 2012-02-29  |      2 |      6 |             100 |
|         5 | 2012-02-29  |      2 |      6 |             200 |
|         6 | 2012-02-29  |      2 |     10 |            2000 |
|         7 | 2012-02-29  |      1 |     10 |            2000 |
+-----------+-------------+--------+--------+-----------------+

项目
+--------+--------------------+
| itemID | itemName           |
+--------+--------------------+
|      1 | Coca Cola (lata)   |
|      2 | Cerveza Sol (lata) |
+--------+--------------------+

好的,伙计们,我已经按要求提供了一些样本数据我需要这张桌子:
+--------+--------------------+---------------+-------------+----------+--------------+--------------+
| itemID | itemName           | itemExistence | restockDate | userName | userLastName | userUsername |
+--------+--------------------+---------------+-------------+----------+--------------+--------------+
|      2 | Cerveza Sol (lata) |          2350 | 2012-02-29  | Jason    | Bourne       | jason        |
|      1 | Coca Cola (lata)   |          2148 | 2012-02-29  | Ricardo  | Vega         | richard      |
+--------+--------------------+---------------+-------------+----------+--------------+--------------+

但是,我需要重新进货日期是每个商品名的最新日期。在这个例子中,它显示了第一次补货,而不是最新的一次。我只需要展示这个项目的存在和上次被重新储备的时间,而不是第一次。
如果我的表不好,请建议一个新的模式。
我知道这可能是很多,所以我会小费5美元(贝宝)的一个如何能帮助我。答应我。

最佳答案

如注释中所述,许多补货可以在同一天执行,因此在这种情况下不可能比较日期。这里提供了两个选项:使用restocks表中的增量PK或重新构造表。对于第一种情况,这是解决方案:

select i.itemID, i.itemName, i.itemExistence, r.restockDate, u.userName,
  u.userLastName, u.userUsername
from items i
left join (
    select r1.restockDate, r1.itemID, r1.userID from restocks r1
    left join restocks r2
    on r1.itemId = r2.itemId and r1.restockId < r2.restockId
    where r2.restockDate is null
) as r on i.itemID = r.itemID
inner join users u on r.userID = u.userID

对于第二种情况,重构意味着将日期字段更改为唯一标识记录的唯一日期时间。不过,这是最好的解决方案,它也需要更新表中以前的任何数据。这意味着,要更新具有相同日期的所有记录,以便对单个产品重新进货,并为它们设置不同的日期时间。
懒惰的人(像我一样)会选择第一个选项:)如果你对此有任何疑问,请告诉我。

关于mysql - 什么查询在MySQL上获得以下内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9493785/

10-11 12:46