先建表,插入测试数据

--正积分表
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. pl/sql developer 设置oracle的date类型默认显示样式

    oracle里默认的date显示样式: 我的是汉化过的: 进入后,点击工具->首选项->日期/时间设置即可: 设置后在pl/sql developer中查看: 英文版的操作步骤: Tool ...

  2. HDU 6212 Zuma 2017青岛网络赛 区间DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6212 解法:看了眼题就发现这个BZOJ 1032不是一毛一样?但是BZOJ上那是个巨坑,数据有错,原来 ...

  3. Scrapy:创建爬虫程序的方式

    Windows 10家庭中文版,Python 3.6.4,Scrapy 1.5.0, 在Scrapy中,建立爬虫程序或项目的方式有两种(在孤读过Scrapy的大部分文档后): 1.继承官方Spider ...

  4. css-css背景

    CSS 允许应用纯色作为背景,也允许使用背景图像创建相当复杂的效果 一:背景色background-color 属性 p {background-color: gray;} 二:背景图像 backgr ...

  5. 数据库-python操作mysql(pymsql)

    pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同 一:安装pymysql pip3 install pymysql 二:使用pytmysql # -*- codin ...

  6. WEB前端 [编码] 规则浅析

    前言 说到前端安全问题,首先想到的无疑是XSS(Cross Site Scripting,即跨站脚本),其主要发生在目标网站中目标用户的浏览器层面上,当用户浏览器渲染整个HTML文档的过程中出现了不被 ...

  7. js中的事件委托或是事件代理

    JavaScript(jQuery)中的事件委托 https://www.cnblogs.com/zhoushengxiu/p/5703095.html js中的事件委托或是事件代理详解 https: ...

  8. js字符串基本操作

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtm ...

  9. [java笔记]常用的设计模式

    1.单例设计模式 单例设计模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 1)构造方法私有化 2)声明一个本类对象 3)给外部提供一个静态方法获取对象实例 例如: class Singl ...

  10. Unix IPC之共享内存区(1)

    1 共享内存区 共享内存区是可用IPC形式中最快的,只有映射和解除映射需要进入内核的系统调用,映射后对共享内存区的访问和修改不再需要系统调用(内核只要负责好页表映射和处理页面故障即可),但通常需要同步 ...