簡體   English   中英

如何使用mySQL選擇具有一列最大值的結果,按另一列分組?

[英]How do I use mySQL to select results which have a maximum value for one column, grouped by another column?

不確定這個問題有多大意義,但希望我能用一個例子來解釋。

我有一個包含以下列的表:

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)指數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
                 )

效率來自能夠進行索引查找而不是聚合。 缺點是查詢很難解釋(“選擇沒有PriceChangeDate大於該記錄的每個Dealid記錄”)。

SELECT DealID, MAX(PriceChangeDate)
FROM Table1
GROUP BY DealID

要么

SELECT t1.*
FROM Table1 t1
WHERE t1.PriceChangeDate = (SELECT MAX(t2.PriceChangeDate) 
                            FROM Table1 t2
                            WHERE t2.DealID = t1.DealID)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM