MySQL - 返回每个数据组的最后一条记录

标签 mysql sql query-optimization

<分区>

使用以下数据...

+--------------+--------+---------------+-----------------+----------------+
| EQUIPMENT_ID | CML_ID | INSPECTION_NO | INSPECTION_DATE | WALL_THICKNESS |
+--------------+--------+---------------+-----------------+----------------+
| B1000-V001   | 1      | 1             | 1/01/2016       | 10             |
| B1000-V001   | 1      | 2             | 2/01/2016       | 9              |
| B1000-V001   | 1      | 3             | 3/01/2016       | 3              |
| B1000-V001   | 1      | 4             | 4/01/2016       | 7              |
| B1000-V001   | 1      | 5             | 5/01/2016       | 5              |
| B1000-V001   | 1      | 6             | 6/01/2016       | 4              |
| B1000-V001   | 1      | 7             | 7/01/2016       | 4              |
| B1000-V001   | 1      | 8             | 8/01/2016       | 8              |
| B1000-V001   | 1      | 9             | 9/01/2016       | 17             |
| B1000-V001   | 1      | 10            | 10/01/2016      | 5              |
| B1000-X123   | 5      | 1             | 1/01/2016       | 2              |
| B1000-X123   | 5      | 2             | 2/01/2016       | 8              |
| B1000-X123   | 5      | 3             | 3/01/2016       | 4              |
| B1000-X123   | 5      | 4             | 4/01/2016       | 5              |
| B1000-X123   | 5      | 5             | 5/01/2016       | 7              |
| B1000-P789   | 3      | 1             | 1/01/2016       | 8              |
| B1000-P789   | 3      | 2             | 2/01/2016       | 7              |
| B1000-P789   | 3      | 3             | 3/01/2016       | 5              |
| B1000-P789   | 3      | 4             | 4/01/2016       | 1              |
| B1000-P789   | 3      | 5             | 5/01/2016       | 4              |
+--------------+--------+---------------+-----------------+----------------+

我想要以最快的方式产生以下结果...

+--------------+--------+---------------+-----------------+----------------+
| EQUIPMENT_ID | CML_ID | INSPECTION_NO | INSPECTION_DATE | WALL_THICKNESS |
| B1000-V001   | 1      | 10            | 10/01/2016      | 5              |
| B1000-P789   | 3      | 5             | 5/01/2016       | 4              |
| B1000-X123   | 5      | 5             | 5/01/2016       | 7              |
+--------------+--------+---------------+-----------------+----------------+

即GROUP BY EQUIPMENT_ID, CML_ID 并始终返回与最大检查数量关联的记录。

最佳答案

尝试下面的查询。

    Select a.Equipment_ID, a.CML_ID, b.INSPECTION_NO,a.INSPECTION_DATE, a.WALL_THICKNESS
    from
    #YourTable a inner join
    (
    Select Equipment_ID, CML_ID, max(INSPECTION_NO)as INSPECTION_NO
    from #YourTable
    Group By Equipment_ID,CML_ID 
    ) b
    on a.Equipment_ID=b.Equipment_ID and a.CML_ID=b.CML_ID and a.INSPECTION_NO=b.INSPECTION_NO
    order by a.Equipment_ID

SQL_FIDDLE:DEMO

如果您有任何问题或疑虑,请告诉我们。

关于MySQL - 返回每个数据组的最后一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40416902/

相关文章:

mysql - 有问题的 SQL 实践 - 按 id 而不是创建时间排序

python - 如何使用 python 将 null 参数传递给 mysql 过程中的日期字段

mysql - utf-8 字符集 txt 文件转换为 mysql 在 macos 上无法正确显示

Mysql查询: returning rows where all preceding rows in group match a condition

sql - sqoop如何在将数据导入到hive时自动从db2中修剪一些字符类型列?

javascript - SQL SELECT 和 UPDATE 语法

mysql - 优化 MySQL 全文搜索查询?

php - 当没有值重复时重复键输入

php - MySQL 查询 : generate all the people that are in the same classes at the same school as the current user

MongoDB 未在 '_id' 上使用复合索引