我的效果:
公司名称|职位列表
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.找出公司的职位

解决方案 »

  1.   

    把具体的表结构发出来,usid或corpname都是属于谁的?
      

  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       //登陆用户名
      

  3.   

    我的效果:
    公司名称|职位列表
    a        a.1,a.10用到表:
    公司表:corp
    职位表:position两者可以用usid或corpname关联,要求:
    最新的职位(发表或更新的时间),职位可用(status=0).也就是说只要a公司发表了两个职位,只要其中一个时间接近最近时间他就出现在最前面. 
      

  4.   

    我要的效果:
    公司名称|职位列表
    a公司    a.1,a.10          //a.1和a.10代表a公司发表的职位
      

  5.   

    只要用这条有问题的SQL:
    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公司'的'程序员'职位时间近
      

  6.   

    晕还有没看明白的?
    找到最近职位的变化(发表或更新的时间来看)的公司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      //登陆用户名
      

  7.   

    这条SQL是可以找出职位变化的usid!但会出现重复
    SELECT p.usid FROM hr_positions p WHERE p.status=0 ORDER BY IsNull(p.modifydate,p.entrydate) DESC
      

  8.   

    大家帮看看:
    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
      

  9.   

    这条SQL是可以的,能不能去掉top后还能出现相同的结果
    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)
      

  10.   

    我想问的是:先排序后(ORDER BY ISNULL(p.modifydate, p.entrydate) DESC)再过滤重复记录!
      

  11.   


    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 
      

  12.   

    大哥你的SQL语句在查询分析器中提示:
    服务器: 消息 1033,级别 15,状态 1,行 1
    除非同时指定了 TOP,否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。
      

  13.   


    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 连接
      

  14.   

    是不是如下SQL:
    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都会重复.一个企业可以发布多个职员能不重吧!难不成再把这个结果集当一个临时表吗
      

  15.   

    SELECT DISTINCT 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) 去重复加DISTINCT行不?