选择最大值似乎不起作用以避免重复

时间:2016-12-16 10:14:12

标签: mysql database

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

返回

MYID 的charValue initialDate
XX7334HD ABY 2015年9月1日
ZY8754UD ABZ 2015年11月21日
BB7777AA ABD 2016年7月11日
BB7777AA ABE 2016年12月1日

正如您所看到的,ID中的所有行都不同,但是有一个id重复(可能)具有不同的char值。我需要这些重复的消失在这些情况下总是采用max initialDate。

这应该返回

MYID 的charValue initialDate
XX7334HD ABY 2015年9月1日
ZY8754UD ABZ 2015年11月21日
BB7777AA ABE 2016年12月1日

为了做到这一点,我在上面的语句中尝试了max(initialDate),但似乎不起作用,因为它混合了两个寄存器,返回正确的id,正确的initialDate但是另一行的charValue ...... / p>

这样做的最佳方式是什么?

修改

我试过了:

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
        )

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

2 个答案:

答案 0 :(得分:0)

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

所以你需要弄清楚max(initialDate)的id。我无法编写确切的查询,因为我不知道initialDate存储在哪个表中。

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

答案 1 :(得分: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模式,则建议的查询无法正常工作