SELECT * FROM A INNER JOIN B B1 ON A.UID=B1.UID WHERE NOT EXISTS(SELECT 1 FROM B WHERE B1.UID=UID AND B1.取得日期 <取得日期)
一种方法,先用子查询得到每个人的最终学历时间,然后求得最终学历 SELECT a.UID, b.`Name`, c.学历, c.取得时间 FROM ( -- 获得每个人的最终学历取得时间 SELECT UID, MAX(取得时间) 取得时间 FROM Cred b GROUP BY UID) a, Stu b, Cred c WHERE a.UID=b.UID AND b.UID=c.UID AND a.取得时间=c.取得时间二种方法,与4楼相同,排除每个人取得时间较早的记录: SELECT a.UID, a.`Name`, 学历, 取得时间 FROM Stu a INNER JOIN Credb b ON a.UID=b.UID WHERE NOT EXISTS(SELECT 1 FROM Cred c WHERE c.UID=b.UID AND b.取得时间 <c.取得时间)
where a.uid=b.uid
group by a.uid,a.name,b.学历
order by a.uid
我试下改成时间戳的方式保存日期看看。
WHERE NOT EXISTS(SELECT 1 FROM B WHERE B1.UID=UID AND B1.取得日期 <取得日期)
SELECT a.UID, b.`Name`, c.学历, c.取得时间
FROM (
-- 获得每个人的最终学历取得时间
SELECT UID, MAX(取得时间) 取得时间
FROM Cred b
GROUP BY UID) a, Stu b, Cred c
WHERE a.UID=b.UID AND b.UID=c.UID AND a.取得时间=c.取得时间二种方法,与4楼相同,排除每个人取得时间较早的记录:
SELECT a.UID, a.`Name`, 学历, 取得时间
FROM Stu a INNER JOIN Credb b ON a.UID=b.UID
WHERE NOT EXISTS(SELECT 1 FROM Cred c WHERE c.UID=b.UID AND b.取得时间 <c.取得时间)
大侠请问,from后面还能跟两个表名? 小白飘过
还有请问,group by后面跟很多列是什么意思,一直绕不过来这个弯子,是说根据这么多列一起分组么??
CREATE TABLE `t1` (
`uid` int(11) DEFAULT NULL,
`name` varchar(30) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE `t2` (
`id` INT(11) DEFAULT NULL,
`学历` VARCHAR(30) DEFAULT NULL,
`取得时间` CHAR(7) DEFAULT NULL,
`uid` INT(11) DEFAULT NULL
) ENGINE=MYISAM DEFAULT CHARSET=utf8;表数据:
insert into `t1`(`uid`,`name`) values (1,'张三'),(2,'李四'),(3,'王五');
insert into `t2`(`id`,`学历`,`取得时间`,`uid`) values (1,'本科','2012-07',1),(2,'大专','2010-07',2),(3,'本科','2013-07',2),(4,'硕士','2013-07',3),(5,'本科','2009-09',3);查询SQL:
SELECT *
FROM (SELECT
t1.uid AS uid,
t1.name AS NAME,
t2.学历 AS 学历,
t2.取得时间 AS 取得时间
FROM t1,
t2
WHERE t1.uid = t2.uid) t3
WHERE NOT EXISTS(SELECT
1
FROM t2
WHERE t3.取得时间 < t2.取得时间
AND t3.uid = t2.uid);---------------------注: 如果你想尽快的得到你要的结果,请贴出你的表结构和表数据---------------