mysql - 从 MySQL 数据库中的多个相同行中选择最新记录

标签 mysql unique distinct

我正在开发一个产品样本库存系统,用于跟踪产品的移动情况。每个产品的状态可以是“IN”或“OUT”或“REMOVED”状态。表的每一行代表一个新条目,其中 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/

相关文章:

laravel - 属于多个关系。如何获得唯一的行

Cakephp 3.0 独特的电子邮件

mysql - 如何在 MySQL 中以三个一组的形式显示行

Mysql排名函数有两列并按第三列排序

sql - Access 2003 中对多个字段的唯一约束

postgresql - 根据 postgres 中不同的 2 个字段选择行

database - 使用自定义顺序区分列

java - 无法在一个范围内找到 DISTINCT 素因子的 NUMBER

Mysql 数字字符串格式化

mysql - 使用 Node JavaScript 将批量数据插入 MySQL