请教高手: 以下是数据库中的三条记录,英文为字段名称 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语句有什么问题
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语句有什么问题
so.......
select
*
from
planapprstatus
where
TaskBeginTime=(select max(TaskBeginTime) from planapprstatus where id=t.id)
FROM planapprstatus
--这个你分了两次组了
where not exists(select 1 from planapprstatus where a.PlanName=PlanName and a.TaskBeginTime<TaskBeginTime)
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
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
)
)
可以创建唯一值的字段;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行受影响)
*/
inner join
(
SELECT PlanName, MAX(TaskBeginTime) AS Expr1
FROM planapprstatus
GROUP BY PlanName
) tb
on ta.PlanName=tb.PlanName and ta.TaskBeginTime=tb.Expr1