从mysql表中选择复杂数据

时间:2014-01-06 11:48:29

标签: php mysql

我有列的mysql表acc_records id(pk),acc_no,acc_name,date_created。 我必须显示来自该表的acc_no,acc_name数据,如果两个或多个ids(pks)包含相同的acc_no,或者两个或更多个ids(pks)包含相同的acc_namedate_created并在结果中排​​除最新结果。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您需要通过子查询获取帐户名称,日期和最后一个ID,并将原始表格连接到子表格。需要对帐号进行相同的操作,并且需要获取不同的ID(两个子表中可能都有一些记录)。

实质上,这是您需要的查询。

select * from account_records ar inner join 

(
select distinct id from 
(
select ar.id as id from 
account_records ar inner join
(
  select count(*), max(id) as lastId, acc_name, date_created from account_records ar
  group by acc_name, date_created 
  having count(*) > 2
) aggr
on ar.acc_name = aggr.acc_name 
and ar.date_created = aggr.date_created
and ar.id < aggr.lastId 

union

select id from account_records ar inner join 
  (
    select count(*), max(id) as lastId, acc_no from account_records ar
    group by acc_no
    having count(*) > 2
   ) aggrId
on aggrId.acc_no = ar.acc_no
and ar.id < aggrId.lastId
  ) allIds
  ) distinctIds
on ar.id = distinctIds.id
;

这是sqlfiddle