不知道这个问题有多大意义,但希望我能举例说明。
我有一个包含以下各列的表:
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
不大于该记录”)。