![](/img/trans.png)
[英]How do I select rows from a MySQL table grouped by one column with required values in another
[英]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.