我有这样的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%'


这返回

myIdcharValueinitialDate
XX7334HDABY2015-09-01
ZY8754UDABZ2015-11-21
BB7777AAABD2016-07-11
BB7777AAABE2016-12-01

如您所见,所有行的ID都不相同,但是有一个ID重复(可能)具有不同的char值。我需要这种重复消失在这些情况下始终要使用最大initialDate。

这应该返回

myIdcharValueinitialDate
XX7334HDABY2015-09-01
ZY8754UDABZ2015-11-21
BB7777AAABE2016-12-01

为此,我在上面的语句中尝试使用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
        )


但是现在它只返回一个值w ...

最佳答案

使用MAX()函数时,还需要使用GROUP BY。问题可能是valueChar或charValue列。这将导致一个随机值。因为您只告诉mysql获取initialDate的最大值。

因此,您需要找出max(initialDate)的ID。我无法编写确切的查询,因为我不知道initialDate存储在哪个表中。

而且您的查询非常奇怪。您加入了t4,并且在相应的部分中没有引用t4。请重新检查您的零件。

关于mysql - 选择最大值似乎无法避免重复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41181998/

10-12 13:56