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 ...
随机推荐
- Docker基础速成(一)
Docker基础速成(一) 给亲爱的写的docker基础速成,按照步骤操作,实践出真知,希望有提纲挈领之功效 1.docker简介 Docker 轻量级容器,如图,类似于一个个集装箱,把复杂或者零散的 ...
- Nginx常见错误与问题之解决方法技术指南
Nginx常见错误与问题之解决方法技术指南. 安装环境: 系统环境:redhat enterprise 6.5 64bit 1.Nginx 常见启动错误 有的时候初次安装nginx的时候会报这样的 ...
- robotframework-ride多次运行,有时候不显示日志信息
解决方法: 修改"C:\Python27\lib\site-packages\robotide\contrib\testrunner\testrunner.py"文件pop方法中 ...
- 查找Mysql慢查询Sql语句
一.MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句 1,slow_query_log 这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句. 2,long_query_tim ...
- Oracle学习笔记:wm_concat函数合并字段
在Oracle中使用wm_concat(column)可以实现字段的分组合并,逗号分隔. 例如,现有表temp_cwh_test: -- 创建临时表 create table temp_cwh_tes ...
- R语言学习笔记:使用reshape2包实现整合与重构
R语言中提供了许多用来整合和重塑数据的强大方法. 整合 aggregate 重塑 reshape 在整合数据时,往往将多组观测值替换为根据这些观测计算的描述统计量. 在重塑数据时,则会通过修改数据的结 ...
- phpmyadmin新加用户登陆不了,测试解决方案。
今天在给项目配置数据库管理平台时遇到一个问题,不论怎么添加mysql用户在登陆phpmyadmin时始终无法登陆,不管准不准许为空依然报出#1045 无法登陆服务器的错误,最后打开mysql库中use ...
- codeforces 603 A
题目大意:给你一个0,1串, 你可以反转一段连续的区间,问你最长的合法子串是多长, 合法字串相邻的两个不能相同. 思路:dp[ i ][ k ][ j ] 表示到第 i 个字符, 处于k这种状态, k ...
- RTSP 资料
分享两个不错的播客. http://blog.csdn.net/u010425035/article/details/10410851 http://blog.csdn.net/xiaoyafang1 ...
- 洛谷P2525 Uim的情人节礼物·其之壱 [康托展开]
题目传送门 Uim的情人节礼物·其之壱 题目描述 情人节到了,Uim打算给他的后宫们准备情人节礼物.UIm一共有N(1<=N<=9)个后宫妹子(现充去死 挫骨扬灰!). 为了维护他的后宫的 ...