更正一下. 最后一条插入的SQL语句为: INSERT INTO DbTemp(StudentID,IsReduce,BelongMonth) VALUES(2,0,'2008-6-1');

解决方案 »

  1.   

    講清楚要顯示的結果集2008-7-1: StudentID为2的记录 --這條記錄怎麼來的
      

  2.   


    第一楼更正了最后一句SQL语句您可能没注意到.
      

  3.   

    其实如果从编程的角度来看,算法很简单. 取出每个StudentID符合条件(指定日期段)的最后一条记录, 如果IsReduce为0(添加)则返回该行,为1(减去)则不要该行. 就是不知道用SQL语句如何来表达.
      

  4.   

    select a.* from  DbTemp a,
    (select StudentID,max(id) as max_id
    from DbTemp
    where BelongMonth<='2008-3-1'
    group by StudentID) as b
    where a.StudentID=b.StudentID and a.id=b.max_id and a.IsReduce=0
      

  5.   

    select a.* from  DbTemp a,
    (select StudentID,max(id) as max_id
    from DbTemp
    where BelongMonth<='2008-3-1'
    group by StudentID) as b
    where a.StudentID=b.StudentID and a.id=b.max_id and a.IsReduce=0
      

  6.   


    谢了! 解决了. 不过这中间的max(id)要改为max(BelongMonth). 下面做对应更改就行了. 呵呵
    select a.* from DbTemp a, 
    (select StudentID,max(BelongMonth) as max_BelongMonth 
    from DbTemp 
    where BelongMonth <='2008-7-1'
    group by StudentID) as b 
    where a.StudentID=b.StudentID and a.BelongMonth=b.max_BelongMonth and a.IsReduce=0
      

  7.   


    create function F_Str(@m Datetime) 
    returns nvarchar(100) 
    as 
    begin     
    declare @S nvarchar(100)    
    select @S=isnull(@S+',','')+cast([StudentID]as varchar(10)) from DbTemp 
    where DATEPART(m,[BelongMonth]) <= DATEPART(m,@m) 
    group by StudentID
    having sum(case IsReduce when 0 then 1 else -1 end)=1
    return @S 
    end select distinct convert(varchar(10),[BelongMonth],120), dbo.F_Str([BelongMonth])
    from DbTemp/*
    2008-03-01 1,2
    2008-04-01 2
    2008-05-01 1
    2008-06-01 1
    */
      

  8.   

    不好意思啊,npkaida, 结贴的时候没看到你的回复......