参考日期: 20.10.2015
第1步:需要PayTO表中的最大日期> MAX(PayTO)
步骤2:检查这个最大值(PayTO)<参考日期(20.10.2015)
MenTBL
======
TZ | Fname
===========
11 | ZZZ
22 | XXX
33 | CCC
44 | VVV
PayTbl
======
TZ | PayTO
===========
11 | 01/01/2015
11 | 03/05/2015
11 | 06/01/2016
22 | 01/01/2015
22 | 01/10/2015
33 | 01/01/2015
33 | 01/12/2015
44 | 01/01/2015
44 | 04/05/2015
44 | 18/10/2015
结果应该是这样的:
22 | 01/10/2015 | XXX
44 | 18/10/2015 | VVV
重要提示:PayTO为字符串字段
答案 0 :(得分:2)
<强>查询强>
select p.TZ,
date_format(max(str_to_date(p.PayTO, '%d/%m/%Y')), '%d/%m/%Y') as dt,
m.FName
from PayTbl p
inner join MenTbl m
on p.TZ = m.TZ
group by p.TZ, m.FName
having max(str_to_date(p.PayTO, '%d/%m/%Y'))
< DATE('2015-10-20')
;
<强>输出强>
+----+------------+-------+
| TZ | dt | FName |
+----+------------+-------+
| 22 | 01/10/2015 | XXX |
| 44 | 18/10/2015 | VVV |
+----+------------+-------+
<强> sqlfiddle 强>
备注强>
由于PayTO字段类型,必须使用str_to_date。这将比使用日期类型字段
的类似查询执行得慢