我有一个表 是客户在我们公司购买物品的价格表 (想把他算成积分的一块钱一点积分) 表里面有很多的记录 列有 标识列 公司名称  花费金额 消费日期 就这四项项  我是这样的 客户公司可以把自己在我们公司消费的钱通过一块钱一积分算成积分 然后可以兑换物品 假如现在又个客户兑换了物品 花费了12000的积分(也就是他们在我们公司花费的12000块钱)但是在我的表里 他们是分日期花费的嘛 假如是好长时间下来才积攒的20000积分 现在他们花费积分后我就想从最早的日期开始删除所有的积分加起来等于12000的行 (当然可能出现把行里面的积分减去一定数才能刚好到12000积分的情况 也要考虑到)这样我就是在是不知道SQL语句该怎么写了 

解决方案 »

  1.   

    你那样的表设计是不合理的,,,你又要删除记录,,又要累计容易出问题一般  ERP里面的数据统计都使用下面方法
    单独做表单独存关于积分的进出记录,,,
    使用正或负作为积分的使用,和增加,只记录当月的进出操作,,,做月结操作累计到下面表
    再做一个表作为积分汇总记录,,,一个用户一行记录,,,记录上个月末积分合计结余
    每次获取用户积分数时,用汇总表+当月积分合计,,,
      

  2.   

    无法更改表结构你就可以参考一下SQL declare  @sum int 
    set @sum=0
    select @sum=max(clos) from 
    (
    select *,(select sum(花费金额)  from t where t.消费日期<=a.消费日期) as clos 
            from t as a
            where 公司名称 ='xx'
    ) tb
    where  公司名称 ='xx' and clos<=25
    if @sum=25 
    select 'ok'
    else
    select 25-@sum然后你要删除就
    delete t from t  as t1
    inner join 
    (
     select 公司名称,消费日期 from 
         (
    select *,(select sum(花费金额)  from t where t.消费日期<=a.消费日期) as clos 
            from t as a
            where 公司名称 ='xx'
          ) tb
    where  公司名称 ='xx' and clos<=12000
     ) as t2 on t1.公司名称=t2.公司名称 and t1.消费日期 =t2.消费日期然后剩下的数 25-@sum
    你再随便找笔去update就行了
      

  3.   

    -0-哈哈,,互相学习而已,,,
    SQL不多练习就会退步拉-0-
    你碰到的问题说不定明天我也会碰到-0-
    既然现在闲着就帮你下忙而已