連絡先と検索の2つのテーブルがあります。「連絡先」には、連絡先の ID と勤務先の会社 ID があります。「検索」には contactid と彼が所属する companyid があり、連絡先は 2 つの会社で働くことができます。また、連絡先が最後にデータベースを検索した時間も含まれています。cityid は、彼が働いていた都市に対応します。
一意に識別されたすべての連絡先の最終検索日を探しています。目的の出力を得るにはどうすればよいですか?
create table contact (id integer primary key auto_increment, companyid integer, contactid integer, unique key(companyid, contactid));
insert into contact (companyid, contactid) values (1,1), (1,2), (2,3);
コンタクト:
id companyid contactid
1 1 1
2 1 2
3 2 3
create table search (searchid integer primary key auto_increment, companyid integer, contactid integer, cityid integer, lastsearchdate date);
insert into search (companyid, contactid, cityid, lastsearchdate) values (1,1,1,'2012-03-01'), (1,1,2,'2012-04-16'), (2,3,3,'2012-04-01'), (1,1,1,'2012-03-07'), (2,3,4,'2012-04-10'), (1,2,1,'2012-04-01');
探す:
searchid companyid contactid cityid lastsearchdate
1 1 1 1 2012-03-01
2 1 1 2 2012-04-16
3 2 3 3 2012-04-01
4 1 1 1 2012-03-07
5 2 3 4 2012-04-10
6 1 2 1 2012-04-01
望ましい出力:
companyid contactid cityid lastsearchdate
1 1 2 2012-04-16
1 2 1 2012-04-01
2 3 4 2012-04-10
これまでのクエリ:
select b.companyid, b.contactid, a.cityid, a.lastsearchdate from search a join contact b
on a.companyid = b.companyid and a.contactid = b.contactid
join search c
on a.companyid = c.companyid and a.contactid = c.contactid and a.lastsearchdate > c.lastsearchdate
group by b.companyid, b.contactid;