我正在开发一个产品样本库存系统,在其中跟踪产品的运动。每个产品的状态可以具有“ IN”或“ OUT”或“已删除”的状态。表的每一行代表一个新条目,其中ID,状态和日期是唯一的。每个产品都有一个序列号。
我需要有关SQL查询的帮助,该查询将返回当前所有“ OUT”的产品。如果仅选择SELECT * FROM table WHERE status = "IN"
,它将返回状态为IN的所有产品。
每当产品进出时,我都会复制该特定产品的最后一行,并更改状态并更新日期,它将自动获得新的ID。
这是我的桌子:
id | serial_number | product | color | date | status
------------------------------------------------------------
1 | K0T4N | XYZ | silver | 2016-07-01 | IN
2 | X56Z7 | ABC | silver | 2016-07-01 | IN
3 | 96T4F | PQR | silver | 2016-07-01 | IN
4 | K0T4N | XYZ | silver | 2016-07-02 | OUT
5 | 96T4F | PQR | silver | 2016-07-03 | OUT
6 | F0P22 | DEF | silver | 2016-07-04 | OUT
7 | X56Z7 | ABC | silver | 2016-07-05 | OUT
8 | F0P22 | DEF | silver | 2016-07-06 | IN
9 | K0T4N | XYZ | silver | 2016-07-07 | IN
10 | X56Z7 | ABC | silver | 2016-07-08 | IN
11 | X56Z7 | ABC | silver | 2016-07-09 | REMOVED
12 | K0T4N | XYZ | silver | 2016-07-10 | OUT
13 | 96T4F | PQR | silver | 2016-07-11 | IN
14 | F0P22 | DEF | silver | 2016-07-12 | OUT
最佳答案
该查询将为您提供每个serial_number
的所有最新记录。
SELECT a.* FROM your_table a
LEFT JOIN your_table b ON a.serial_number = b.serial_number AND a.id < b.id
WHERE b.serial_number IS NULL
下面的查询将给出您的预期结果
SELECT a.* FROM your_table a
LEFT JOIN your_table b ON a.serial_number = b.serial_number AND a.id < b.id
WHERE b.serial_number IS NULL AND a.status LIKE 'OUT'
关于mysql - 从MySQL数据库中的多个相同行中选择最新记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38487349/