tb1
Name Date Level
张三 8/15/2011 经理
李四 8/16/2011 经理
李四 8/17/2011 职员
王五 8/16/2011 经理
如何查询出每个姓名时间最大的那条记录,实际情况中tb1还有很多字段,用group by的结果导致其他字段也分组了
如何查询出以下结果?
Name Date Level
张三 8/15/2011 经理
李四 8/17/2011 职员
王五 8/16/2011 经理

解决方案 »

  1.   


    select *
    from tb t
    where not exists (select 1 from tb where name = t.name and date > t.date)
      

  2.   

    select name,date,level from tb a
    where not exists(select 1 from tb where name = a.name and date<a.date)
      

  3.   

    --修改
    select name,date,level from tb a
    where not exists(select 1 from tb where name = a.name and date>a.date)
      

  4.   

    --或者这样
    select name,date,level from tb a
    where  exists(select 1 from tb where name = a.name and date<a.date)
      

  5.   


    CREATE TABLE TB1(
    NAME VARCHAR(20),
    U_DATE DATE,
    POSITION VARCHAR(20))
    ----------
    INSERT INTO TB1(NAME,U_DATE,POSITION)
    SELECT '张三','8/15/2011','经理'
    UNION ALL
    SELECT '李四','8/16/2011','经理'
    UNION ALL
    SELECT '李四','8/17/2011','经理'
    UNION ALL
    SELECT '王五','8/16/2011','经理'
    -------
    SELECT *
    FROM TB1
    -----查询--
    SELECT NAME,MAX(U_DATE) U_DATE,POSITION
    FROM TB1
    GROUP BY NAME,POSITION
    ----
    DROP TABLE TB1
      

  6.   


    ;WITH
    CTE AS(
    SELECT  NAME,Date,Level,
                      (ROW_NUMBER() OVER(PARTITION BY NAME ORDER BY Date DESC )) NUMBER
    FROM TB1
    )
    SELECT NAME,Date,Level
    FROM CTE WHERE NUMBER=1也行