2014-09-19 32 views
0

我從兩個表由左加入他們獲取數據,我必須得到其最大值的基地一個特定的記錄,這是我的查詢應用最大條件與加入

select t1.Id,t2.LastModifiedDate,t2.TypeId 
     from Table1 t1 
     Left join Table2 t2 
     on t1.Id=t2.Id and (t2.Disabled=0 and t2.TypeId not in (1,3,5)) 
     where 
     t2.TypeId =8 

,這是我的表結構

t1 ==> Id Name Age 
    t2 ==> TransactionId TypeId LastModifiedDate Disabled Id 

我有這樣的應用狀況Where子句

t2.TypeId =8 and (t2.TransactionId=Max(TransactionId) and t2.Disabled=1) 

我怎樣才能得到最大的Tr的特定類型Id的ansactionId? ie只有當它的typeId爲8且禁用= 1時,才允許最大TransactionId。

+1

你用什麼DB?甲骨文? – Justin 2014-09-19 06:00:17

+0

SQL server 2008 R2 – 2014-09-19 06:02:53

+0

@SyedSalmanRazaZaidi如果您將RDBMS添加爲標記,那麼最好(sql-server-2008) – 2014-09-19 06:15:27

回答

1

您可以使用子查詢來獲取特定TypeID的最大transactionID。

SELECT t1.Id, LastModifiedDate, TypeID 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON t1.Id=t2.Id 
WHERE (t2.Disabled=0 AND t2.TypeID NOT IN (1,3,5)) 
AND t2.TypeId=8 
AND t2.TransactionId= 
    (SELECT MAX(TransactionID) FROM Table2 t3 WHERE t3.TypeID=t2.TypeID) 

在最後一行的子查詢使用表2,並賦予它一個新的別名(「T3」),這樣你就可以給它指的是從TYPEID在主查詢「T2」的條件。 我可能並不完全明白你在這裏想要做什麼,但重點是你可能想要的東西可以用子查詢來完成。

這是可能的,如果你想要的是一個特定賬戶的最新交易中,你可以大大地通過簡單地選擇交易,爲了通過TRANSACTIONID降簡化了這一點,只取第一個結果(即LIMIT 1TOP 1取決於DBMS)。

+0

感謝您的回答,我希望如果TypeId = 8,它具有交易的最大值,然後傳遞它在查詢中,讓我試試你的解決方案 – 2014-09-19 06:13:24