2016-12-16 52 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