不确定这个问题有多大意义,但希望我能用一个例子来解释。
我有一个包含以下列的表格:
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/