我有两张 table 。一张表存储库存项目的基本信息,如 id 和 description。另一个表存储每天结束时库存项目的状态;因此此表中有许多行具有相同的 inventoryItemID 但日期不同。下面基本上是我的表格的样子。
TABLE: listItems
|itemRecordNumber|itemName|minStock|reorderQty|note|
| 510 | bag | 10 | 20 | |
| 511 | ball | 20 | 40 | |
| 512 | shoe | 09 | 10 | xx |
,
TABLE: inventoryTrans
|itemRecordNumber|recordType|quantity| trans_date |
| 510 | 50 | 30 | 09/12/2013 |
| 510 | 40 | 33 | 09/12/2013 |
| 510 | 50 | 35 | 08/12/2013 |
| 510 | 40 | 35 | 08/12/2013 |
| 511 | 50 | 10 | 08/12/2013 |
| 511 | 40 | 15 | 09/12/2013 |
| 512 | 50 | 33 | 07/12/2013 |
| 512 | 40 | 34 | 09/12/2013 |
现在,我想要的是表 inventoryTrans 中每个 itemRecordNumber 的最新记录,并且只有类型 50(销售)的记录,但是等等,如果表 listItems 中某个项目的注释是 ' xx' 我对那个结果不感兴趣。我真正需要这张表的是数量。请注意,此表没有项目名称/minStock/reorderQty,这就是为什么我需要第一个表 listItems 来获取该信息。
所以在单个查询中我想得到,
|itemRecordNumber|itemName| trans_date |quantity|minStock|reorderQty|
| 510 | bag | 09/12/2013 | 30 | 10 | 20 |
| 511 | ball | 08/12/2013 | 10 | 20 | 40 |
所以我想要的是这些信息。请注意,它是每个 ID 的最新记录类型“50”,但由于 listItems.note 中该项目的注释为“xx”,因此排除了项目 512;
现在,在您批评表格的构造之前,这不是我可以改变的。这就是 Peachtree 会计(我公司手头正在使用的软件)的表格布局方式,所以这就是我必须使用的。目标是生成有关库存的自定义信息以实现更好的管理。
现在我如何为此构建一个 SQL 查询。我看到人们在其他一些类似的示例中使用 LEFT JOIN,但我无法让它工作。
最佳答案
开始了
http://sqlfiddle.com/#!2/d30823/1这是你的数据的例子
SELECT a.itemRecordNumber,
a.itemName,
max(b.trans_date) AS trans_date,
b.quantity,
a.minStock,
a.reorderQty
FROM listItems a,
inventoryTrans b
WHERE a.itemRecordNumber = b.itemRecordNumber
AND a.note<>'xx'
AND b.recordtype=50
GROUP BY a.itemRecordNumber
编辑: 如果是 MS Access(我无法测试),这应该可以工作,你能试试吗(我试过 MS SQL,这是我可以在 SQLFiddle 中测试的最接近的
http://sqlfiddle.com/#!3/d30823/2
SELECT a.itemRecordNumber,
a.itemName,
max(b.trans_date) AS trans_date,
b.quantity,
a.minStock,
a.reorderQty
FROM listItems a,
inventoryTrans b
WHERE a.itemRecordNumber = b.itemRecordNumber
AND a.note<>'xx'
AND b.recordtype=50
AND b.trans_date =
(SELECT max(trans_date)
FROM inventoryTrans c
WHERE c.itemRecordNumber = b.itemRecordNumber
AND c.recordtype=50)
GROUP BY a.itemRecordNumber,
a.itemName,
b.quantity,
a.minStock,
a.reorderQty
如果出于任何原因它对您不起作用,请告诉我,我得到的结果与您的问题相同
关于mysql - 检索每个 ID 的最新记录。如何,在 SQL 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22052199/