首页 > 解决方案 > MySql 从查询中获取第一个和最后一个结果

问题描述

我正在数据库中创建一些文档记录,每个文档可以有多个版本。每个新版本都是数据库中的一条新记录。为了将文档版本组合在一起,我为它们分配了一个共享的唯一 id groupId

我试图从数据库中获取的是最新的文档版本,但我也希望在日期创建原始文档:

documents table
- id
- group_id
- version
- created_at

示例记录:

id: 1, group_id: 'xyz', version: 1, created_at: date
id: 2, group_id: 'xyz', version: 2, created_at: date
id: 3, group_id: 'xyz', version: 3, created_at: date
etc...

我正在考虑使用 distinct 或 order by 然后在查询中添加限制 1 以获得 1 个结果:

SELECT * FROM documents 
WHERE group_id='xyz'
ORDER BY 'created_at' DESC
LIMIT 1

但是,除了(或代替)最新版本的 created_at 日期之外,我如何还包括原始文档的 created_at 日期?

我知道我可以使用 重新运行查询,ORDER BY 'created_at' ASC LIMIT 1但是有没有办法在 1 个查询中完成所有操作?

标签: mysqlsql

解决方案


您可以使用子查询:

SELECT * FROM documents 
WHERE id in (
    select min(id) FROM documents WHERE group_id='xyz'
    union
    select max(id) FROM documents WHERE group_id='xyz'
)

推荐阅读