寻找构建MySQL日期查询的方向

时间:2015-10-19 06:40:31

标签: mysql

参考日期: 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为字符串字段

1 个答案:

答案 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。这将比使用日期类型字段

的类似查询执行得慢