我的数据库是这样子的ID    COMPANYID      WORKTYPE        WORKTIME
1       1001            01          2006-06-10
2       1002            03          2006-06-10  
3       1001            02          2006-06-11
现在COMPANYID为1001的有两条数据,我想取WORKTIME大的那条,不取WORKTIME小的那条,请问这条SELECT语句怎样写,谢谢

解决方案 »

  1.   

    select * from 表名 a where not exists(select 1 from 表名 where companyid=a.companyid and id>a.id)
      

  2.   

    orselect * from 表名 a where not exists(select 1 from 表名 where companyid=a.companyid and WORKTIME>a.WORKTIME)使用前一个要比后一个快一些!·
      

  3.   

    select 
        t.* 
    from 
        tname t 
    where 
        not exists(select 1 from tname where COMPANYID=t.COMPANYID and WORKTIME>t.WORKTIME)
      

  4.   

    SELECT a.ID,a.CompanyID,a.WorkType a.WorkTime
    FROM Company a
    INNER JOIN
    (SELECT MAX(WorkType) AS WorkType,CompanyID FROM Company GROUP BY CompanyID) b
    ON b.WorkType=a.WorkType AND b.CompanyID=a.CompanyID或者SELECT * FROM Company WHERE WorkType IN(SELECT MAX(WorkType) FROM Company GROUP BY CompanyID)
    这种写法在WOrkType有重复值时不能正常取出数据
    可以改写为
    SELECT * FROM Company a WHERE WorkType =(SELECT MAX(WorkType) FROM Company b WHERE a.CompanyID=b.CompanyID GROUP BY CompanyID)效率有差别.
    没有测试,仅供参考