例如Staff表有ID,      Name,   Date,       Dype
             001      aaa     2013-01-01  a
             001      aaa     2013-01-02  b
             002      bbb     2013-01-01  a
             002      bbb     2013-01-02  a怎样能查出这样记录?,如下:
             001      aaa     2013-01-01  a
             002      bbb     2013-01-01  a
这个是按ID,Name分组查询,Date,Dype列显示对应第一行记录?

解决方案 »

  1.   

    with cte as (select row_number() over ( partition by ID,      Name order by  Date ) as xh , * from Staff )
    select * from cte where xh = 1;
      

  2.   


    WITH    cte
              AS ( SELECT   row_number() OVER ( PARTITION BY ID, Name ORDER BY Date ) AS xh ,
                            *
                   FROM     Staff
                 )
        SELECT  ID,      Name,   Date,       Dype
        FROM    cte
        WHERE   xh = 1 ;
      

  3.   

    忘记了,是SQL 2005,没有row_number()吧
      

  4.   

    select min(ID) as ID,Name,min(Date) as Date,min(Dype) as Dype from Staff group by Name
      

  5.   

    select ID,Name,Date,Dype from Staff where exists (select min(id) from Staff  group by Name)
      

  6.   

    05开始有的row_number()函数,也可以用通用的子查询
    select * from tb a 
    where not exists
    (select 1 from tb where id=a.id and Date<a.Date) 
      

  7.   

    谢谢大家,谢谢c_enhui, row_number()可以解决此问题了