我有一个像这样的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
)
但现在它只返回一个值...
答案 0 :(得分:0)
使用MAX()函数时,还需要使用GROUP BY。问题是valueChar或charValue列。这将导致随机值。因为你只告诉mysql获取initialDate的最大值。
所以你需要弄清楚max(initialDate)的id。我无法编写确切的查询,因为我不知道initialDate存储在哪个表中。
你的查询非常奇怪。您加入t4并且在相应的部分中没有对t4的引用。请重新检查你的零件。
答案 1 :(得分:0)
您还需要group by
和max()
一样
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
模式,则建议的查询无法正常工作