2010-12-17 32 views
0

我有一個名爲ae_types的表。它包含三個字段是相關的,我的問題:如何根據同一表中另一個字段的最大值獲取字段ID

aetId    This is Auto Increment and is the Primary Key 
aetProposalType  Text field 5 characters long 
aetDaysToWait  Byte data type 

aetProposalTypeaetDaysToWait是在一個獨特的密鑰,這樣我保證永遠不會有兩個aetProposalType s的相同aetDaysToWait

我在尋找的結果是獲得的字段的最大aetDaysToWait的字段的aetId

下面是我已經想出來實現這個的查詢,但在我看來,它可能是不必要的複雜,並不是很漂亮。

SELECT ae_types.aetId AS lastEmailId, ae_types.aetProposalType 
FROM ae_types INNER JOIN 

(SELECT ae_types.aetProposalType, Max(ae_types.aetDaysToWait) AS MaxOfaetDaysToWait 
FROM ae_types GROUP BY ae_types.aetProposalType) AS ae_maxDaysToWaitByProposalType 

ON (ae_types.aetDaysToWait = ae_maxDaysToWaitByProposalType.MaxOfaetDaysToWait) 
AND (ae_types.aetProposalType = ae_maxDaysToWaitByProposalType.aetProposalType); 

什麼是一些替代解決方案,爲什麼他們會更好?

PS如果您有任何問題,請詢問,我會很樂意嘗試提供答案。

+1

由於您詢問「替代解決方案」......每當您將自己綁在椒鹽捲餅結上時,您必須重新評估。你試圖執行什麼業務規則?很少有充分的理由想知道有關自動增量ID的任何信息。 – Tim 2010-12-17 20:08:53

+0

'ae_types'表中的每條記錄表示一個事件類型。這些事件按'aetDaysToWait'字段排序,並按'aetProposalType'字段分組。我需要找到每種類型的最後一個事件的ID。然後檢查當前事件(來自其他表格的數據)是否是最終事件,並將其標記爲如果是。 – Icode4food 2010-12-17 22:12:17

回答

1

這就是我也會這樣做的方式。

select a.aetId, a.aetProposalType, a.aetDaysToWait 
    from ae_types a 
     inner join (select aetProposalType, max(aetDaysToWait) as MaxDays 
        from ae_types 
        group by aetProposalType) sq 
      on a.aetProposalType = sq.aetProposalType 
       and a.aetDaysToWait = sq.MaxDays 
相關問題