0

連絡先と検索の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;
4

1 に答える 1

1

あなたが探しているものの説明に基づいて、これはあなたのサンプルデータからの望ましい出力ではないでしょうか? (以下のレコード 2 と 3 も破棄した理由がわからない)

companyid contactid cityid   lastsearchdate    
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 

これが正しければ、次のクエリが機能します。

select t1.companyid, t1.contactid, t1.cityid, t1.lastsearchdate
from search t1
where t1.lastsearchdate = (select max(t2.lastsearchdate) from search t2 where t2.companyid =
t1.companyid and t2.contactid = t1.contactid and t2.cityid = t1.cityid);
于 2012-04-19T19:49:05.090 に答える