请教高手: 以下是数据库中的三条记录,英文为字段名称              id           planname                                      TaskBeginTime                   Status
329 2010年03月份技术中心计划建议书 2010-3-30 15:43:55 5 329 2010年03月份技术中心计划建议书 2010-3-30 16:21:17 5 329 2010年03月份技术中心计划建议书 2010-4-3 15:47:17 2
332 2010年03月份bb计划建议书           2010-3-31 8:44:39 5 332 2010年03月份bb计划建议书           2010-3-31 10:03:02 2
332 2010年03月份bb计划建议书           2010-3-31 8:50:02 5
现在我想得到每一个计划中TaskBeginTime最大的记录,用以下SQL语句             
SELECT PlanName, MAX(TaskBeginTime) AS Expr1
FROM planapprstatusGROUP BY PlanName
能够得到329 2010年03月份技术中心计划建议书 2010-4-3 15:47:17 2
332 2010年03月份bb计划建议书           2010-3-31 10:03:02 2
这两条记录,但是当我用以下语句时(加入Status)
SELECT PlanName, MAX(TaskBeginTime) AS Expr1,Satus
FROM planapprstatusGROUP BY PlanName,Status
却得到4条记录

329 2010年03月份技术中心计划建议书 2010-3-30 16:21:17 5 329 2010年03月份技术中心计划建议书 2010-4-3 15:47:17 2
332 2010年03月份bb计划建议书           2010-3-31 10:03:02 2
332 2010年03月份bb计划建议书           2010-3-31 8:50:02 5
请高手指点,这个SQL语句有什么问题

解决方案 »

  1.   

    不同的PlanName,Status就分为一组
    so.......
      

  2.   

    你应该这样:
    select
      *
    from
      planapprstatus
    where
      TaskBeginTime=(select max(TaskBeginTime) from planapprstatus where id=t.id)
      

  3.   

    SELECT PlanName, MAX(TaskBeginTime) AS Expr1,Satus
    FROM planapprstatus
    --这个你分了两次组了
      

  4.   

    select * from planapprstatus a
    where not exists(select 1 from planapprstatus where a.PlanName=PlanName and a.TaskBeginTime<TaskBeginTime)
      

  5.   

    --第一条语句分组情况如下:
    329 2010年03月份技术中心计划建议书 2010-3-30 15:43:55 5
    329 2010年03月份技术中心计划建议书 2010-3-30 16:21:17 5
    329 2010年03月份技术中心计划建议书 2010-4-3 15:47:17 2 
    --------------------------------------------------------------
    332 2010年03月份bb计划建议书 2010-3-31 8:44:39 5
    332 2010年03月份bb计划建议书 2010-3-31 10:03:02 2
    332 2010年03月份bb计划建议书 2010-3-31 8:50:02 5 
    --第二条语句分组情况如下:
    329 2010年03月份技术中心计划建议书 2010-3-30 15:43:55 5
    329 2010年03月份技术中心计划建议书 2010-3-30 16:21:17 5
    --------------------------------------------------------------
    329 2010年03月份技术中心计划建议书 2010-4-3 15:47:17 2 
    --------------------------------------------------------------
    332 2010年03月份bb计划建议书 2010-3-31 8:44:39 5
    332 2010年03月份bb计划建议书 2010-3-31 8:50:02 5 
    --------------------------------------------------------------
    332 2010年03月份bb计划建议书 2010-3-31 10:03:02 2
      

  6.   

    SELECT *
    FROM planapprstatus t1
    where not exists(
    select 1 from planapprstatus t2 where t1.PlanName=t2.PlanName 
    and t1.TaskBeginTime<t2.TaskBeginTime)如果日期有重复select * from planapprstatus t1
    where id = (select top 1 t2.id from planapprstatus t2
    where t2.TaskBeginTime = (select max(t3.TaskBeginTime) from planapprstatus t3
    where t2.id=t3.id 
    )
    )
      

  7.   


    可以创建唯一值的字段;with t as(select idd=row_number() over (order by getdate()),* from planapprstatus)
    SELECT * FROM planapprstatus WHERE TaskBeginTime IN(SELECT MAX(TaskBeginTime)FROM t GROUP BY PlanName)/*测试结果id  planname                        TaskBeginTime           Status
    -------------------------------------------------------------------
    329 2010年03月份技术中心计划建议书  2010-04-03 15:47:17.000 2
    332 2010年03月份bb计划建议书        2010-03-31 10:03:02.000 2(2行受影响)
    */
      

  8.   

    select * from planapprstatus ta
    inner join

    SELECT PlanName, MAX(TaskBeginTime) AS Expr1
    FROM planapprstatus
    GROUP BY PlanName
    ) tb
    on ta.PlanName=tb.PlanName and ta.TaskBeginTime=tb.Expr1