有两个表 员工表 和 调整记录表,属于一对多关系。结构如下
员工表
---------------------------
员工ID 姓名
---------------------------
1 张三
2 李四
3 王五
调整记录表
------------------------------
ID 员工ID 日期 岗位
------------------------------
1 1 2015-6-6 甲车间
2 2 2015-6-6 乙车间
3 3 2015-6-6 丙车间
4 1 2015-10-1 乙车间
5 2 2015-10-2 丙车间
6 3 2015-10-3 甲车间
现在想生成一个各个员工最新岗位状况的表,形如
1 张三 乙车间 2015-10-1
2 李四 丙车间 2015-10-2
3 王五 甲车间 2015-10-3
这样的select语句该如何写呢?
请教个sql查询问题
- 百草谷居士
- 帖子: 3919
- 注册时间: 2006-02-10 16:36
- 系统: Mint21.1/Deepin20.8
请教个sql查询问题
debian 12 / 深度系统 20.9 / Mint 21.3
为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
- YeLee
- 论坛版主
- 帖子: 26406
- 注册时间: 2008-08-13 8:48
- 系统: Fundu i64
- 来自: 东海硇州,一双管钥。
- 联系:
Re: 请教个sql查询问题
代码: 全选
SELECT u.UserID, u.Username, d.Date, d.offer FROM User AS u INNER JOIN Date AS d ON u.UserID=d.UserID;
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
- astolia
- 论坛版主
- 帖子: 6444
- 注册时间: 2008-09-18 13:11
Re: 请教个sql查询问题
和子查询连接
如果用sqlite,可以简化掉一个select
代码: 全选
select a."姓名",b."岗位",b."日期" from 员工表 a left join (select "员工ID", "岗位", "日期" from 调整记录表 where "ID" in (select max("ID") "ID" from 调整记录表 group by "员工ID")) b on a."员工ID" = b."员工ID";
- 百草谷居士
- 帖子: 3919
- 注册时间: 2006-02-10 16:36
- 系统: Mint21.1/Deepin20.8
Re: 请教个sql查询问题
我觉得应该是
试试
代码: 全选
select a."姓名",b."岗位",b."日期" from 员工表 a left join (select "员工ID", "岗位", "日期" from 调整记录表 where "日期" in (select max("日期") "ID" from 调整记录表 group by "员工ID")) b on a."员工ID" = b."员工ID";
debian 12 / 深度系统 20.9 / Mint 21.3
为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
- astolia
- 论坛版主
- 帖子: 6444
- 注册时间: 2008-09-18 13:11
Re: 请教个sql查询问题
你这样是不对的。如果你要用日期,则应该同时把员工ID一同取出,才能保证唯一性。否则遇到下面这种数据会出错
------------------------------
ID 员工ID 日期 岗位
------------------------------
1 1 2015-6-6 甲车间
2 2 2015-6-6 乙车间
3 1 2015-6-7 乙车间
从你给的数据看,ID字段的数据是无重复的,而且越新加入的调整记录,其ID值也越大。
所以 select max("ID") "ID" from 调整记录表 group by "员工ID" 就足够找出每一个员工最近的一条记录了
------------------------------
ID 员工ID 日期 岗位
------------------------------
1 1 2015-6-6 甲车间
2 2 2015-6-6 乙车间
3 1 2015-6-7 乙车间
从你给的数据看,ID字段的数据是无重复的,而且越新加入的调整记录,其ID值也越大。
所以 select max("ID") "ID" from 调整记录表 group by "员工ID" 就足够找出每一个员工最近的一条记录了
- 百草谷居士
- 帖子: 3919
- 注册时间: 2006-02-10 16:36
- 系统: Mint21.1/Deepin20.8
Re: 请教个sql查询问题
你说的很对,我只考虑了“最近日期”这个现实条件,没有想到在数据库实现上,其实还有一个ID可以同时起到最近日期这个功能。
debian 12 / 深度系统 20.9 / Mint 21.3
为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。