Group by 没有给我最新的组

Posted

技术标签:

【中文标题】Group by 没有给我最新的组【英文标题】:Group by doesn't give me the newest group 【发布时间】:2011-10-14 19:59:37 【问题描述】:

我试图从我的表中获得不同的结果,人们说我应该使用 group by。这工作了一半......我现在得到了不同的结果,但结果不是最新的线程......我的表格包含几座建筑物的公寓的状态。公寓可以多次找到,因为它是一个历史表...我需要进行选择以检索具有当前状态的不同公寓。

ID    Building Apartment_id  Status
1     1        1             1
2     1        1             2
3     2        2             3
4     2        4             2
5     2        3             2
6     2        5             1
7     2        6             1

我目前正在与:

SELECT * FROM `ib30_history` GROUP BY apartment_id, building ORDER BY id DESC

【问题讨论】:

你能说清楚点吗?结果你需要什么? 给定样本数据,期望的输出是什么?说起来,code(作为 SQL 语句)是一种更有用的展示样本数据的方式,因为它可以是tested directly。 正如我所说,该表包含很多公寓历史。状态会随着时间的推移而变化......免费......免费......等等......这非常适合历史概览......但我需要能够选择公寓并只获得最新状态...所以如果有 100 个不同的公寓并且历史表有 1000 个历史行,我需要获得 100 个具有最新状态的公寓:) 希望清除它... @Ronnie:什么算“最新”?示例数据没有日期字段,ID 不足。请按照要求在您的问题中包含示例结果。 复制mysql: select max(score) doesn't return the relevant row data. how to solve the isssue?、Control which row is returned by a group by、choose which result to return on GROUP BY row 【参考方案1】:
SELECT 
  Building
  , Appartment_id
  , Status 
FROM ib30_history a
WHERE id = ( SELECT MAX(id) FROM ib30_history b 
             WHERE b.Building = a.Building AND b.Appartment_id = a.Appartment_id)

【讨论】:

这个看起来很有希望......它很慢,但它似乎给了我正确的结果 - 经过更多测试后我会回复你 是的,执行引擎可能难以正确简化子查询。我更喜欢子查询,因为大多数时候它们对于代码阅读器来说更容易理解(代码的阅读频率高于编写频率)。但是,有时差异很大,并且必须执行子查询,但是您可以检查运行时,也许可以根据我的建议进行 EXPLAIN SELECT。 谢谢你的回答..它检查了..你的 sql 给了我我正在寻找的结果! :) 当我获得更多历史记录行时,对这将如何扩展有什么想法吗? 不太好。我建议从结构上解决这个问题。在我添加到历史表之后,我可能会使用触发机制或单独的写入来创建一个浓缩表。这样做的好处是可以在定义的时间内确定状态,而不是根据历史记录表中的记录数来衡量运行时间。 非常感谢...我会考虑再做一张桌子:)【参考方案2】:
 select h.apartment_id, h.status
  from history h 
       join (select apartment_id, max(status) status
               from history
              group by apartment_id) recent 
       on h.apartment_id = recent.apartment_id 
      and h.status = recent.status

【讨论】:

恐怕这无济于事......它返回不止一行公关。公寓...我需要该列表仅包含 1 行公关。公寓喜欢独特的 我只是建议对此查询进行编辑以更正其结果。就个人而言,我发现这个派生表使用子查询比相关子查询更具可读性,因为“这个子查询的结果是什么”和“这个子查询与查询的其余部分有什么关系”是分开的。

以上是关于Group by 没有给我最新的组的主要内容,如果未能解决你的问题,请参考以下文章

GROUP BY最新用户,但最新日期没有用户

SQL中where和group by可以连用吗?having算是对检索条件的补充吗?

使用不同的组规则自动执行 group_by 函数

dplyr 0.7没有给我我想要的结果

group by 查找订单的最新状态 join

Sql order by 和 group BY 如何共同运用?