表person(人员资料): id, pName, dw 表xl(学历):id, PersonId, xl, qdxlsj, xw sql语句: select a.pName, a.dw, b.xl, b.qdxlsj, b.xw from person a, xl b where a.id = b.PersonId group by a.pName, a.dw, b.xl, b.qdxlsj, b.xw, b.PersonId having b.qdxlsj = (select max(c.qdxlsj) from xl c where c.PersonId = b.PersonId) 类似上面的写法,改为中文即可
表1:编号 姓名 单位
12345 张三 中国浙江xxx
12346 李四 中国江苏xx
12347 王五 中国浙江xx表2 编号 学历 学位 取得时间
12345 高中 无 1992-7-1
12345 大专 无 1995-7-1
12346 初中 无 1989-7-1
12346 高中 无 1992-7-1
12346 本科 学士 1996-7-1要求查询生成这样一个表,当前学历表: 姓名 学历 学位
12345 大专 无
12346 本科 学士
12347 null null
表xl(学历):id, PersonId, xl, qdxlsj, xw
sql语句:
select a.pName, a.dw, b.xl, b.qdxlsj, b.xw from person a, xl b
where a.id = b.PersonId
group by a.pName, a.dw, b.xl, b.qdxlsj, b.xw, b.PersonId
having b.qdxlsj = (select max(c.qdxlsj) from xl c
where c.PersonId = b.PersonId) 类似上面的写法,改为中文即可
不过你的办法并不适用我的要求。
一,其实字段与表都比较多,是对四张表的连接查询;
二、如果能用left join解决是最好的了。
还在思索中....
其实原来的方案已经实现了,但是现在多了个东西:
就这么一回事:
表1:编号 姓名 单位
12345 张三 中国浙江xxx
12346 李四 中国江苏xx
12347 王五 中国浙江xx表2 编号 学历 学位 取得时间 学校
12345 高中 无 1992-7-1 xxxxxxxx
12345 大专 无 1995-7-1 yyyyyyyy
12346 初中 无 1989-7-1 mmmmmmm
12346 高中 无 1992-7-1 ccccc
12346 本科 学士 1996-7-1 eee要求查询生成这样一个表,当前学历表: 姓名 学历 学位 学校 时间
12345 大专 无 xxx
12346 本科 学士 hdf
12347 null null null null
由于 时间与学位学历都是数字型或时间型,因此可以用max()方法取出,但问题是文本型的“学校”与“专业”取不出来,对于这二者而言,分组后并无大小(新旧)可言。
谢谢大家,可以用多层SQL,可能效率比较低,不过好歹是完成了。