2015-10-19 29 views
1

參考日期:二○一五年十月二十○日尋找方向構建MySQL日期查詢

步驟1:從需要表PayTO> MAX(PayTO)

步驟2最大日期:檢查是否此最大值( PayTO)<基準日(二零一五年十月二十零日)

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

建議轉換PayTO到日期字段,因爲這是它的商店和更容易以這種方式 – amdixon

回答

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。這將日期類型的字段進行比類似查詢慢

+0

方位的使用!它完美的作品 – dodo

+0

酷!我也需要它 – Gold

+0

不用擔心。只有很小的建議是開發一個腳本來遷移數據以日期類型存儲它(然後查詢會進一步簡化) – amdixon