我的效果:
公司名称|职位列表
a a.1,a.10用到表:
公司表:corp
职位表:position两者可以用usid或corpname关联,要求:
最新的职位(发表或更新的时间),职位可用(status=0).也就是说只要a公司发表了两个职位,只要其中一个时间接近最近时间他就出现在最前面.我的想法是:
1.找出最近职位变化(发表或更新的时间)的公司
困惑的地方在这:要分组,滤重,排序
示例:
SELECT c.ciid,c.corpname FROM hr_corpinfo c WHERE c.usid in(SELECT p.usid FROM hr_positions p WHERE p.status=0 GROUP BY p.usid ORDER BY IsNull(p.modifydate,p.entrydate) DESC) --有问题2.找出公司的职位
公司名称|职位列表
a a.1,a.10用到表:
公司表:corp
职位表:position两者可以用usid或corpname关联,要求:
最新的职位(发表或更新的时间),职位可用(status=0).也就是说只要a公司发表了两个职位,只要其中一个时间接近最近时间他就出现在最前面.我的想法是:
1.找出最近职位变化(发表或更新的时间)的公司
困惑的地方在这:要分组,滤重,排序
示例:
SELECT c.ciid,c.corpname FROM hr_corpinfo c WHERE c.usid in(SELECT p.usid FROM hr_positions p WHERE p.status=0 GROUP BY p.usid ORDER BY IsNull(p.modifydate,p.entrydate) DESC) --有问题2.找出公司的职位
hr_corpinfo
c.ciid, //公司表ID:int
c.corpname //公司名:varchar
usid //附助列hr_positions
------------------//附助列
usid
corpname
-----------------//
p.modifydate, //编辑日期:smalldatetime
p.entrydate //录入日期:smalldatetime
status //是否可用:0可用hr_user
usid //用户表id:int
corpname //如果是企业是用企业名称
username //登陆用户名
公司名称|职位列表
a a.1,a.10用到表:
公司表:corp
职位表:position两者可以用usid或corpname关联,要求:
最新的职位(发表或更新的时间),职位可用(status=0).也就是说只要a公司发表了两个职位,只要其中一个时间接近最近时间他就出现在最前面.
公司名称|职位列表
a公司 a.1,a.10 //a.1和a.10代表a公司发表的职位
SELECT c.ciid,c.corpname FROM hr_corpinfo c WHERE c.usid in(SELECT p.usid FROM hr_positions p WHERE p.status=0 GROUP BY p.usid ORDER BY IsNull(p.modifydate,p.entrydate) DESC)
找出:最近职位有变动的公司ciid,corpname即可.不可以重复.
变动的意思:
最新的职位(发表或更新的时间来看),职位可用(status=0).也就是说只要a公司发表了两个职位,只要其中一个时间接近最近时间他就出现在最前面.发表或更新的时间来看示例:
公司名称 | 发布时间 | 编辑时间 | 是否可用 | 职位名称
a公司, 2008-12-06 2009-09-01 0 职员
b公司 2007-06-05 2009-09-03 0 程序员
a公司 2008-12-06 2009-09-03 0 出纳哪么:'a公司'就要出现在'b公司'的前面.因为'a公司'的以'出纳'职位比'b公司'的'程序员'职位时间近
找到最近职位的变化(发表或更新的时间来看)的公司id即可!还要保证职位是可用的!可能用到的结构:
hr_corpinfo
c.ciid, //公司表ID:int
c.corpname //公司名:varchar
usid //附助列hr_positions
------------------//附助列
usid
corpname
-----------------//
p.modifydate, //编辑日期:smalldatetime
p.entrydate //录入日期:smalldatetime
status //是否可用:0可用hr_user
usid //用户表id:int
corpname //如果是企业是用企业名称
username //登陆用户名
SELECT p.usid FROM hr_positions p WHERE p.status=0 ORDER BY IsNull(p.modifydate,p.entrydate) DESC
SQL:SELECT TOP 100 PERCENT usid, corpname, modifydate, entrydate
FROM dbo.hr_positions p
WHERE (status = 0)
ORDER BY ISNULL(modifydate, entrydate) DEusid corpname modifydate entrydate
924 a NULL 2009-6-30
924 a 2009-6-30 2009-5-31
924 a 2009-6-30 2009-5-31
1123 v NULL 2009-6-30
1123 v NULL 2009-6-30
23 c NULL 2009-6-22
1073 b NULL 2009-6-22我的结果
924
1123
23
1073
SELECT c.ciid,c.corpname FROM hr_corpinfo c WHERE c.usid IN(SELECT TOP 100 p.usid FROM hr_positions p WHERE p.status = 0 ORDER BY ISNULL(p.modifydate, p.entrydate) DESC)
SELECT c.ciid,c.corpname
FROM hr_corpinfo c join (SELECT p.usid
FROM hr_positions p
WHERE p.status = 0
ORDER BY ISNULL(p.modifydate, p.entrydate) DESC) k on
c.usid=k.usid
服务器: 消息 1033,级别 15,状态 1,行 1
除非同时指定了 TOP,否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。
SELECT c.ciid,c.corpname
FROM hr_corpinfo c join (SELECT p.usid
FROM hr_positions p
WHERE p.status = 0
) k on
c.usid=k.usid
ORDER BY ISNULL(k.modifydate, k.entrydate) DESC
那只能放后面排序了 还有一种做法
你先把
SELECT p.usid
FROM hr_positions p
WHERE p.status = 0
ORDER BY ISNULL(p.modifydate, p.entrydate) DESC 出来的结果放到临时表
然后用临时表盒hr_corpinfo 连接
SELECT c.ciid,c.corpname
FROM hr_corpinfo c
JOIN (SELECT p.usid,entrydate,modifydate FROM hr_positions p WHERE p.status = 0 ) k
on c.usid=k.usid
ORDER BY ISNULL(k.modifydate, k.entrydate) DESC执行后!ciid,c.corpname都会重复.一个企业可以发布多个职员能不重吧!难不成再把这个结果集当一个临时表吗