Sql 先进先出计算积分
先建表,插入测试数据
--正积分表
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 先进先出计算积分的更多相关文章
- SQL语句计算距离今天生日还差几天
转载于:http://www.w3dev.cn/article/20110125/sql-compute-birthdate-now-days.aspx SQL语句计算距离生日还差几天原理很简单,将要 ...
- sql中计算百分比
sql中计算百分比:(转成字符串然后拼接%) ),) AS CHAR),'%') as aa from act_canal; 效果:
- sql语句计算出每个月的天数
原文:sql语句计算出每个月的天数 从当前月-11个月开始,到当前月为止,用一个sql语句计算出每个月的天数. SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-LEVEL+1 ...
- SQL语句计算经纬度距离
二: SQL语句计算经纬度距离 SELECT id, ( 6371* acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( ...
- (二)基于商品属性的相似商品推荐算法——Flink SQL实时计算实现商品的隐式评分
系列随笔: (总览)基于商品属性的相似商品推荐算法 (一)基于商品属性的相似商品推荐算法--整体框架及处理流程 (二)基于商品属性的相似商品推荐算法--Flink SQL实时计算实现商品的隐式评分 ( ...
- SQL Server计算列
计算列由可以使用同一表中的其他列的表达式计算得来.表达式可以是非计算列的列名.常量.函数,也可以是用一个或多个运算符连接的上述元素的任意组合.表达式不能为子查询. 例如,在 AdventureWork ...
- T2: 一种能累积计算积分的EC2实例类型
假设您打算在AWS云端执行一个小型的 Web Server,或是一个小型的数据库,平时并没有大量的工作负载.在绝大多数时间里,您的实例并不须要消耗大量的CPU资源.可是,再不怎么受欢迎的博客也可能会有 ...
- sql server 计算属性,计算字段的用法与解析
SQL学习之计算字段的用法与解析 一.计算字段 1.存储在数据库表中的数据一般不是应用程序所需要的格式.大多数情况下,数据表中的数据都需要进行二次处理.下面举几个例子. (1).我们需要一个字段同 ...
- sql 身份证计算年龄和性别
IdentityNumber 是身份证号 年龄: ,), GETDATE()) / 365.25) as '推荐人年龄', 15位的身份证计算年龄: case when b.IdentityNumbe ...
随机推荐
- RabbitMQ--Hello world!(一)
Introduction RabbitMQ is a message broker. The principal idea is pretty simple: it accepts and forwa ...
- No.13 selenium for python 单选框和复选框
单选框 radio 点击图标,可以获取HTML中定位. 使用普通的ID定位就可以了 定位到指定元素,然后使用clicd选中即可 复选框 checkbox 勾选单个框,跟单选框一样,定位后点击就可以了 ...
- Web 2.0应用客户端性能问题十大根源《转载》
前言 Web 2.0应用的推广为用户带来了全新的体验,同时也让开发人员更加关注客户端性能问题.最近,资深Web性能诊断专家.知名工具dynatrace的创始人之一Andreas Grabner根据自己 ...
- KMP模板及总结
KMP是一种字符串匹配算法,它在时间复杂度上较暴力匹配算法由很大的优势.比如我要找字符串S中是否存在子串P,如果暴力匹配的话,则时间复杂度为O(n*m),而kmp算法时间复杂度为O(n+m). 这里我 ...
- HTML5练习2
1.邮箱注册网页 主要代码: <!doctype html> <html> <meta charset="utf-8"> <title&g ...
- 【LOJ】#2320. 「清华集训 2017」生成树计数
题解 我,理解题解,用了一天 我,卡常数,又用了一天 到了最后,我才发现,我有个加法取模,写的是while(c >= MOD) c -= MOD 我把while改成if,时间,少了 六倍. 六倍 ...
- Codeforces Round #239 (Div. 1) 二项式差分
C - Curious Array 思路:对于区间[l, r]每个数加上C(i - l + k, k), 可以在l处+1, 在r+1处-1, 然后做k+1次求前缀和操作,然后就可以写啦. 然后逐层求前 ...
- Asp.Net Core2.0允许跨域请求设置
1.services /// <summary> /// /// </summary> /// <param name="services">& ...
- 为mongodb数据库增加用户名密码权限
加固mongodb建议:修改数据库默认端口,添加数据库访问权限: 启动数据库(裸奔):C:\mongodb\bin>mongod --dbpath C:\MongoDB\data(同时用--db ...
- Bootstrap进阶六:动态样式语言LESS简介
LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承, 运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, Firefox),也可以借助Node.js或者R ...