当前位置: 首页 > 知识库问答 >
问题:

仅选择具有特定状态的组中的最新版本

方航
2023-03-14

在一个项目中,我正在工作,我有一个表,你可以看到下面。在前端,我只需要显示按entity_id分组发布的记录。例如,在下面的示例中,应该只显示id 1,11,16和19。我不知道怎么做这个查询。我用子查询等尝试了几种方法,但没有一种有效。我猜应该有办法找回这些数据。我错过了什么?

| id | revision   | entity_id   | status     
========================================
| 1  | 1          | 1           | published
| 2  | 2          | 1           | archived
| 3  | 1          | 2           | draft
| 4  | 2          | 2           | draft
| 5  | 3          | 2           | draft
| 6  | 4          | 2           | ready
| 7  | 5          | 2           | draft
| 8  | 6          | 2           | published
| 9  | 7          | 2           | published
| 10 | 8          | 2           | ready
| 11 | 9          | 2           | published
| 13 | 1          | 3           | draft
| 14 | 1          | 4           | draft
| 15 | 2          | 4           | draft
| 16 | 3          | 4           | published
| 18 | 1          | 5           | draft
| 19 | 2          | 5           | published
| 20 | 3          | 5           | draft
| 21 | 10         | 5           | archived 


共有1个答案

彭宜人
2023-03-14

您可以使用row_number()枚举每个实体的“已发布”行,然后将最新的行:

select t.*
from (select t.*, 
             row_number() over (partition by entity_id, status order by revision desc) as seqnum
      from t
      where status = 'published'
     ) t
 where seqnum = 1;

或者,可以在where子句中使用筛选:

select t.*
from t
where t.id = (select max(t2.id)
              from t t2
              where t2.entity_id = t.entity_id and
                    t2.status = 'published'
             );

这将为每个实体返回一行--“已发布”的id最大的行。

 类似资料:
  • 问题内容: 说有这样的表: 字段名称很容易解释。我想选择同时具有1和3 的,因此在此示例中仅。我想到了类似的 清单,之后我想列出该组中存在的。我怎么做? 问题答案: 如果没有任何唯一约束,请尝试: 如果仅尝试检测两个值,请使用此子句: 如果post_id和tag_id都具有唯一约束,那么这也应该起作用:

  • 在oracle DB中检索具有大组最大值的行时遇到问题。 我的桌子看起来是这样的: id,col1,col2,col3,col4,col5,date_col 谢谢你的提示! 干杯

  • 我想编写一个简单的查询来选择PostgreSQL中的许多列。但是,我一直收到错误-我尝试了几个选项,但它们对我不起作用。目前我收到以下错误: 组织。postgresql。util。PSQLException:错误:“列”处或附近出现语法错误 要获取具有值的列,请尝试以下操作: 有什么想法吗?

  • 我使用的是Maven3.6。 感谢帮助

  • 问题内容: 我继承了具有以下结构的表: 是一个标识字段和主键,并且and字段上有非唯一索引。 什么是最有效的方式来获得每个项目名称的最新记录,即在上述行的表 1 , 4 和 6 ,因为他们是最先进的日期项物品应归还 一 , 乙 和 Ç 分别。 问题答案: SQL Server 2005(开始):

  • 问题内容: 我有一个3表SQLServer数据库。 将事物归因于项目后,会在ProjectThingLink表中放置一个条目。事情可以在项目之间移动。CreatedDate也用于了解事物上次移动到哪个项目。 我正在尝试创建所有与事物当前已链接到它们的项目的列表,但是我的大脑却失败了。 有一个简单的方法可以做到这一点吗? 问题答案: 注意:评论后已更正

  • 问题内容: 我想编写一个简单的查询来选择PostgreSQL中的许多列。但是,我不断收到错误-我尝试了一些选项,但它们对我没有用。目前,我收到以下错误: org.postgresql.util.PSQLException:错误:“列”处或附近的语法错误 要获取具有值的列,请尝试以下操作: 有任何想法吗? 问题答案: 是 保留字 。除非您双引号,否则不能将其用作标识符。像:。 不过,这并不意味着您应

  • 问题内容: 我已经看到了很多解决此类问题的解决方案尤其是此SQL仅选择在Column上具有Max Value的行,但是似乎没有一个合适的解决方案: 我有以下表格布局,即附件的版本控制,这些附件绑定到实体: 输出应该是最大版本号,按group_id和Entity_id分组,如果有帮助,我只需要一个单个entity_id的列表即可: 我想出的是这种自我加入: 但是,只有在不同的实体不共享相同的组号的情