最大日期的MySQL查询自联接
我有两张表,联系人和搜索。”“联系人”有联系人的id和他工作的公司id。 “搜索”有联系人ID和他所属的公司ID,因为一个联系人可以在两家公司工作。它还有联系人最后一次搜索数据库的时间。cityid对应于他工作的城市 我正在查找每个唯一标识的联系人的最新搜索日期。如何获得所需的输出最大日期的MySQL查询自联接,mysql,date,join,max,Mysql,Date,Join,Max,我有两张表,联系人和搜索。”“联系人”有联系人的id和他工作的公司id。 “搜索”有联系人ID和他所属的公司ID,因为一个联系人可以在两家公司工作。它还有联系人最后一次搜索数据库的时间。cityid对应于他工作的城市 我正在查找每个唯一标识的联系人的最新搜索日期。如何获得所需的输出 create table contact (id integer primary key auto_increment, companyid integer, contactid integer, unique ke
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;
根据对您正在寻找的内容的描述,这不是示例数据的期望输出吗?不知道为什么您还从下面丢弃了记录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);
联系人由其所在的公司唯一标识。所以1,1和2,3不应该出现两次。1,1和1,2以及2,3是唯一的联系人。通过t1.companyid、t1.contactid添加组;正在给我3个我正在查找的唯一记录,但记录2,3未显示最大日期。奇怪。好的,如果cityid不是联系人标识符的一部分,那么从查询中删除和t2.cityid=t1.cityid将提供所需的结果。它成功了,谢谢!我们如何在不使用MAX的情况下实现这一点,您知道吗?将子查询修改为以下。。。。从搜索t2中选择t2.lastsearchdate,其中t2.companyid=t1.companyid和t2.contactid=t1.contactid按t2.lastsearchdate desc limit 1排序;