mysql - 如何使用 mySQL 选择一列具有最大值并按另一列分组的结果?

标签 mysql select

不确定这个问题有多大意义,但希望我能用一个例子来解释。

我有一个包含以下列的表格:

PriceHistoryID, PriceChangeDate, DealID, Price

它们是主键、日期、外键和价格。这样设置是为了每次更改“交易”的价格时,都会在此表中创建一个新行。

我想做的是创建一个 SELECT,其中为每个唯一的 DealID 返回 1 行,并且该行是 PriceChangeDate 最新的行。

我感觉我以前做过类似的事情,而且看起来并不那么困难,但我却一片空白。感谢您的帮助!

最佳答案

在 MySQL 中,您可以使用子查询和联接来执行此操作:

select d.*
from deals d join
     (select DealId, max(PriceChangeDate) as maxPriceChangeDate
      from deals
      group by DealId
     ) dmax
     on d.DealId = dmax.DealId and
        d.PriceChangeDate = dmax.maxPriceChangeDate;

编辑:

如果您有关于 deals(DealId, PriceChangeDate) 的索引,另一种公式可能会更有效:

select d.*
from deals d
where not exists (select 1
                  from deals d2
                  where d2.DealId = d.DealId and d2.PriceChangeDate > d.PriceChangeDate
                 )

效率来自于能够进行索引查找而不是聚合。缺点是查询很难解释(“为每个 Dealid 选择记录,其中没有 PriceChangeDate 大于该记录”)。

关于mysql - 如何使用 mySQL 选择一列具有最大值并按另一列分组的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20764221/

相关文章:

javascript - 如何检查是否选择了表单选择以提交表单?

mysql多次查询实现同比比较

php - 创建一个数据库以从 PHP 中的数据插入?

PHP MySQL 组合 2 个查询

mysql - 如何找到选择最少学生的类(class)名称

php - 如何将我的 ID 包含在 SELECT 和 JOIN 语句中的 ID?

sql-server - SQL Server 性能 - IF Select + Update 与 Update

mysql - 结合多个 MySQL UNION 查询进行优化

mysql - 了解 SQL 自连接

mysql - 按计数选择组