当前位置: 首页 > 面试题库 >

在分组之前需要对联接表进行排序的联接表出现问题

羊舌炯
2023-03-14
问题内容

我有一个场景,在纸上看似很简单,但是我很难按实际需要进行工作。

我有两个表(仅显示了相关的列):

| Thread
+----------
| ThreadID

| Post
+----------
| PostID
| ThreadID
| Posted (Datetime)

现在,我要执行的操作是加入Thread和Post,并按ThreadID分组。但是我想按Post.Order降序排列。用简单的英语来说,我想加入Thread相关的最新帖子。

到目前为止,我的SQL:

SELECT Thread.ThreadID, Post.PostID, Post.Created
FROM Thread
LEFT JOIN Post ON Post.ThreadID = Thread.ThreadID
GROUP BY Thread.ThreadID
ORDER BY Post.Created DESC

它可以完成工作,但是联接的顺序不正确,因为该顺序当然仅在执行分组后才应用。

当然,必须有一种方法可以满足我的需求?


问题答案:
select t.ThreadID, p.PostID, p.Posted
from Thread t
inner join (
    select ThreadID, Max(Posted) as MaxPosted
    from Post
    group by ThreadID       
) pm on t. ThreadID = pm.ThreadID
inner join Post p on pm.ThreadID = p.ThreadID and pm.MaxPosted = p.Posted
order by p.Posted desc


 类似资料:
  • 我有一个场景,我想过滤、排序和分页3个表参与的结果。 目前,我使用Spring Data JPA的规范特性在单个实体上完成它:<代码>存储库。findAll(规范,页面请求)。 这工作得很好,但现在我有另一个场景,其中排序/过滤器属性分布在由一对多关系连接的3个表上。 以下是我的场景: 有没有一种方法可以使用PageRequest和Specification,其中customerNumber、it

  • 问题内容: 我有一个模型可以使用“使行为成为现实”宝石(Github页面)进行投票。投票系统工作正常,但我尝试显示按每个页面有多少排序的页面。 目前,我的控制器根据标签提取资源,但未排序: 如果我使用单个资源并调用“ @ resource.votes.size”,它将返回其拥有的票数。但是,票数是另一张桌子,因此我认为需要进行某种形式的合并,但我不确定如何进行。我需要的是一个可以这样显示的漂亮的有

  • 问题内容: 我想知道,流(或收集器)中是否已经有一个已实现的功能,已将列表作为值进行了排序。例如,以下代码均产生按年龄分组的按性别分组的人员清单。第一个解决方案具有一些开销排序(看起来有些sc琐)。第二种解决方案需要对每个人进行两次检查,但是必须做到很好。 首先排序,然后分组为一个流: 首先分组,然后对每个值进行排序: 我只是想知道,是否已经实现了某项功能,该功能可以一次运行,例如。 问题答案:

  • 我想知道,流(或收集器)中是否已经实现了将列表排序为值的功能。例如,以下代码均生成按年龄排序的按性别分组的人员列表。第一个解决方案有一些开销排序(看起来有点邋遢)。第二种解决方案需要对每个人进行两次检查,但工作做得很好。 首先排序,然后在一个流中分组: 首先分组,然后对每个值进行排序: 我只是想知道,是否已经实现了一些东西,可以在一次运行中完成,比如。

  • 问题内容: 在查询中引入ORDER BY子句会增加总时间,这是因为数据库需要对排序结果集进行额外的工作: 将结果元组复制到一些临时内存中 对它们进行排序(希望在内存中,否则使用磁盘) 将结果流式传输到客户端 我想念的是为什么仅从联接表中添加列会产生如此不同的性能。 查询1 查询计划 查询2 与上述相同,但不按 查询计划 编辑:添加了更多详细信息 Postgres版本是 8.4 问题答案: 在排序操

  • 问题内容: 我有这种格式的数组: 如何按该字段的降序对该格式的数组排序?是否有内置功能? 问题答案: 使用并提供您自己的功能进行订购,例如