2016-12-16 49 views
0

我有一個MySQL聲明是這樣的:選擇最大值似乎沒有工作,以避免重複

Select myId, valueChar, initialDate from t1 
inner join t2 on t1.id=t2.id 
inner join t3 on t1.id=t3.id and deleted<>1 
inner join t4 on t4.id=t3.id 
inner join t5 on t4.id=t2.id and module='XXX' 
inner join t6 on t6.id=t5.id 
inner join t7 on t7.id=t6.id and valueChar like 'AB%' 

這將返回

身份識別碼的charValueinitialDate
XX7334HDABY2015-09-01
ZY8754UDABZ2015年11月21日
BB7777AAABD2016年7月11日
BB7777AAABE2016年12月1日

正如你所看到的,所有的行都不一樣ID,但有一個id與不同的char值重複(有可能)。我需要在這種情況下總是使用最大的initialDate。

這應返回

身份識別碼的charValueinitialDate
XX7334HDABY2015年9月1日
ZY8754UDABZ2015年11月21日
BB7777AAABE2016年12月1日

要做到這一點,我在上面的語句與max(initialDate)嘗試,但似乎因爲它混合兩個寄存器不工作,返回正確的ID,正確的initialDate但與其他行的charValue ...

這樣做的最佳方法是什麼?

編輯

我嘗試這樣做:

and t4.id=(
     select max(t42.id) 
     from t4 t42 
     inner join t3 t32 on t42.id = t32.id 
     inner join t2 t22 on t22.id=t32.id 
     ) 

但現在只返回一個valuew ...

回答

0

當使用MAX()函數,你還需要使用GROUP BY 。問題將是valueChar或charValue列。這將導致一個隨機值。因爲你只告訴mysql獲取initialDate的最大值。

所以你需要找出max(initialDate)的id。我無法寫出確切的查詢,因爲我不知道initialDate存儲在哪個表中。

而你的查詢是非常奇怪的。您加入t4並在相應的部分中沒有提及t4。請重新檢查您的零件。

+0

我已經固定在T4的錯誤,這是一個錯字。如果我使用group by myId它不起作用,返回完全一樣... initialDate在t6上。你是什​​麼意思,我必須找出最大起始日期的ID? – Maik

+0

我編輯了這個問題,我以爲我應該這樣做,但不起作用... – Maik

0

您還需要做group bymax()

Select myId, valueChar, max(initialDate) from t1 
inner join t2 on t1.id=t2.id 
inner join t3 on t1.id=t3.id and t3.deleted<>1 
inner join t4 on t1.id=t3.id 
inner join t5 on t4.id=t2.id and t5.module='XXX' 
inner join t6 on t6.id=t5.id 
inner join t7 on t7.id=t6.id and t7.valueChar like 'AB%' 
group by myId; 

沿着注:如果Full Group By模式上,則建議的查詢將行不通

+0

要小心,不清楚你會得到哪個值。它可能不是正確的。 – Seb