A 表 (充值记录表) 有以下的字段 ------- hisreload 表
ID (递增) , ToMobile(冲往哪个手机号) , refID (guid , 表示一次事务) ......
----------------------------------------------
B表(transactions)有以下字段
refID(与A表关联) , opTime (操作时间) ........
--------------------------------------------
想实现的功能是: 查询 所有手机号及其最后一次充值记录 , 并对操作时间过滤, 例如去掉 最后一次充值在 2013-9-30 之前的
具体实现是 :
1 : 先找出每一个手机号对应的最后一次充值记录的ID
SELECT ToMobile, MAX(ID) AS MaxID FROM HisReload GROUP BY ToMobile
2 : 因为第一步找出的 记录没有 refid , 所以再和 hisreload 表做一次 inner join
SELECT tt.* FROM HisReload tt INNER JOIN ( SELECT ToMobile, MAX(ID) AS MaxID FROM HisReload GROUP BY ToMobile ) groupedtt ON tt.ToMobile = groupedtt.ToMobile AND tt.ID = groupedtt.MaxID
这样得到的结果集就有 refid了, 取refid的目的是为了和transactions表连接 , 以得到 OpTime
3: 最后再把第二步得到的结果集 和 transaction 表 join ,并对optime做限制,整个sql语句是这样的
select b.toMobile from ( SELECT tt.* FROM HisReload tt INNER JOIN ( SELECT ToMobile, MAX(ID) AS MaxID FROM HisReload GROUP BY ToMobile ) groupedtt ON tt.ToMobile = groupedtt.ToMobile AND tt.ID = groupedtt.MaxID ) b inner join Transactions a on b.RefID=a.RefID where a.OpTime<'2013-9-30'
得出的结果集是 所有 最后一次充值发生在 2013-9-30 之前的手机号。