先建表,插入测试数据

--正积分表
CREATE table tb1
(
[memberId] [nvarchar](50) NOT NULL,
[pointProduceTime] [nvarchar](50) NOT NULL,
[type] [nvarchar](50) NULL,
[point] [int] NULL
)
INSERT INTO tb1 VALUES ('','2017-02-06 00:00:00','',360)
INSERT INTO tb1 VALUES ('','2017-03-17 00:00:00','',930)
INSERT INTO tb1 VALUES ('','2017-03-19 00:00:00','',890)
INSERT INTO tb1 VALUES ('','2017-06-09 21:52:14','',700)
INSERT INTO tb1 VALUES ('','2017-08-28 22:26:12','',1090)
INSERT INTO tb1 VALUES ('','2017-10-23 21:16:29','',1330) --负积分表
CREATE table tb2
(
[memberId] [nvarchar](50) NOT NULL,
[pointProduceTime] [nvarchar](50) NOT NULL,
[type] [nvarchar](50) NULL,
[point] [int] NULL
)
INSERT INTO tb2 VALUES ('','2017-09-23 21:04:50','',-1090)
INSERT INTO tb2 VALUES ('','2017-11-10 12:56:21','',-2500)

表tb1:

表tb2:

在不知道每次需要扣减多少积分的情况下,需使用游标遍历数据

--正积分
SELECT IDENTITY(INT,1,1) as id,memberId,pointProduceTime,type,point,point as lesspoint
INTO #tb1
FROM tb1 --负积分
SELECT IDENTITY(INT,1,1) as id,memberId,pointProduceTime,type,point
INTO #tb2
FROM tb2 declare @inid int
declare @innum int
declare @indate date
declare @outid int
declare @outnum int
declare @outdate date
DECLARE @lessnum int
--负积分游标
declare xrxc_cursorf cursor
for
select id,pointProduceTime,point from #tb2 order by pointProduceTime
open xrxc_cursorf
fetch next from xrxc_cursorf into @outid,@outdate,@outnum --遍历每行数据
WHILE @@FETCH_STATUS=0
BEGIN
--正积分游标
declare xrxc_cursorz cursor
for
select id,pointProduceTime,point,lesspoint from #tb1 where lesspoint>0 order by pointProduceTime
open xrxc_cursorz
fetch next from xrxc_cursorz into @inid,@indate,@innum,@lessnum --遍历每行数据
WHILE @@FETCH_STATUS=0
BEGIN
--方法参考一
IF @outnum<=0
begin
IF @innum >= @outnum*-1
begin
update #tb1 SET lesspoint=@outnum+@innum where id=@inid
end
else
begin
update #tb1 SET lesspoint=0 where id=@inid
end SET @outnum = @outnum+@lessnum
end
else
update #tb1 SET lesspoint=@lessnum where id=@inid
fetch next from xrxc_cursorz into @inid,@indate,@innum,@lessnum /*
    --方法参考二
set @outnum=@outnum+@lessnum
IF @outnum<=0
begin
update #tb1 SET lesspoint=0 where id=@inid
end
else
begin
IF @outnum<@innum
BEGIN
update #tb1 SET lesspoint=@outnum where id=@inid
end
end
fetch next from xrxc_cursorz into @inid,@indate,@innum,@lessnum
    */ END
close xrxc_cursorz
deallocate xrxc_cursorz
fetch next from xrxc_cursorf into @outid,@outdate,@outnum
END
close xrxc_cursorf
deallocate xrxc_cursorf
select * from #tb1
select * from #tb2 DROP TABLE #tb1
DROP TABLE #tb2

结果表:

Sql 先进先出计算积分的更多相关文章

  1. SQL语句计算距离今天生日还差几天

    转载于:http://www.w3dev.cn/article/20110125/sql-compute-birthdate-now-days.aspx SQL语句计算距离生日还差几天原理很简单,将要 ...

  2. sql中计算百分比

    sql中计算百分比:(转成字符串然后拼接%) ),) AS CHAR),'%') as aa from act_canal; 效果:

  3. sql语句计算出每个月的天数

    原文:sql语句计算出每个月的天数   从当前月-11个月开始,到当前月为止,用一个sql语句计算出每个月的天数. SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-LEVEL+1 ...

  4. SQL语句计算经纬度距离

    二: SQL语句计算经纬度距离 SELECT id, ( 6371* acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( ...

  5. (二)基于商品属性的相似商品推荐算法——Flink SQL实时计算实现商品的隐式评分

    系列随笔: (总览)基于商品属性的相似商品推荐算法 (一)基于商品属性的相似商品推荐算法--整体框架及处理流程 (二)基于商品属性的相似商品推荐算法--Flink SQL实时计算实现商品的隐式评分 ( ...

  6. SQL Server计算列

    计算列由可以使用同一表中的其他列的表达式计算得来.表达式可以是非计算列的列名.常量.函数,也可以是用一个或多个运算符连接的上述元素的任意组合.表达式不能为子查询. 例如,在 AdventureWork ...

  7. T2: 一种能累积计算积分的EC2实例类型

    假设您打算在AWS云端执行一个小型的 Web Server,或是一个小型的数据库,平时并没有大量的工作负载.在绝大多数时间里,您的实例并不须要消耗大量的CPU资源.可是,再不怎么受欢迎的博客也可能会有 ...

  8. sql server 计算属性,计算字段的用法与解析

    SQL学习之计算字段的用法与解析   一.计算字段 1.存储在数据库表中的数据一般不是应用程序所需要的格式.大多数情况下,数据表中的数据都需要进行二次处理.下面举几个例子. (1).我们需要一个字段同 ...

  9. sql 身份证计算年龄和性别

    IdentityNumber 是身份证号 年龄: ,), GETDATE()) / 365.25) as '推荐人年龄', 15位的身份证计算年龄: case when b.IdentityNumbe ...

随机推荐

  1. jenkins打包安卓项目

    jenkins打包安卓项目和其它项目差不了太多. 1.构建选择 gradle(如果不用gradle自己写脚本编译也可) 2.jenkins用户需要安装JDK.SDK,jenkins会自动下载gradl ...

  2. css同时满足两个类名才有效果的写法

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  3. css3在动画完成后执行事件

    第一种方法: 用计时器,设定一个和动画时长一样的time,过time事件去执行这个函数. setTimeout(function(){ },time); 第二种方法: 当-webkit-animati ...

  4. HDU 2874 Connections between cities(LCA(离线、在线)求树上距离+森林)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2874 题目大意:给出n个点,m条边,q个询问,每次询问(u,v)的最短距离,若(u,v)不连通即不在同 ...

  5. ZK分布式锁(未完 待续)

    实现思路 公平锁:创建有序节点,判断本节点是不是序号最小的节点(第一个节点),若是,则获取锁:若不是,则监听比该节点小的那个节点的删除事件. 非公平锁:直接尝试在指定path下创建节点,创建成功,则说 ...

  6. Unix IPC之Posix信号量实现生产者消费者

    采用多生产者,多消费者模型. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 /**  * 生产者  */ P(nempty); P(mutex); // 写入一个 ...

  7. JavaScript中判断日期是否相等

    问题 做一个节日提示网页,首先获得当前日期,然后与最近的节日比较,如果恰好是同一天,提示"XX节快乐!"否则,提示"离XX节还有X天".判断是否恰好同一天的时候 ...

  8. CCF CSP 201612-2 工资计算

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201612-2 工资计算 问题描述 小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所 ...

  9. OpenCV处理直方图

    直方图可以用来描述各种不同的事物,如物体的色彩分布.物体边缘梯度模板,以及表示目标位置的当前假设. 简单的说,直方图就是对数据进行统计,将统计值组织到一系列事先定义好的bin中.bin中的数值是从数据 ...

  10. Exception in thread ""http-bio-80"exec-1" java.lang.OutOfMemoryError: PermGen s解决方案

    问题描述: Exception in thread ""http-bio-80"-exec-1" java.lang.OutOfMemoryError: Per ...