sql中循环处理当前行数据和上一行数据相加减

  以下事例,使用游标循环表#temptable中数据,然后让当前行和上一行中的argument1 相加 存放到当前行的 argument2 中,比较简单。

--drop table #temptable
create table #temptable
(
  argument1 int,
  argument2 int,
  argument3 datetime
)

declare @rowcount int,@argument1 int,@argument2 nvarchar(50),@argument3 datetime
set @rowcount=1
set @argument1=1
set @argument2=0
set @argument3=GETDATE()

while(@rowcount<100)
begin
  insert into #temptable(argument1,argument2,argument3)
        values(@argument1,@argument2,@argument3)

  set @argument1=@argument1 + datepart(day,@argument3)
  set @argument3=@argument3-1
  set @rowcount = @rowcount + 1
end

--select * from #temptable

declare @lastargument2 int
set @lastargument2=0
set @argument2=0
declare _cursor cursor for(select argument1 from #temptable)
open _cursor;
fetch next from _cursor into @argument2
while @@fetch_status = 0
begin
  update #temptable
  set argument2=@argument2+@lastargument2
  where current of _cursor

  set @lastargument2=@argument2
  fetch next from _cursor into @argument2
end
close _cursor
deallocate _cursor

--select * from #temptable

问一个问题:

第一句fetch next from _cursor into @argument2 这句为什么不能放在while循环的第一行,删除第二行呢?我记得自己当时在这里出错了,呵呵。

(0)

相关推荐

  • sqlite循环批量插入数据采用批处理文件实现

    需要在sqlite数据库中插入大量测试数据,打算用事务进行循环插入操作,不过sqlite不支持declare变量定义,所以无法通过定义循环变量值来实现. 需要通过一个批处理文件来循环调用插入sqlite语句,方式如下 建立一个循环调用的批处理文件sqlite.bat,文件内容 复制代码 代码如下: @ECHO OFF For /L %%i in (1,1,10000) do (sqlite3.exe test.db<insertdb.bat) pause 这个文件表示循环10000调用inser

  • SQLServer 循环批处理

    下面方法可以用来快速生成一批数据 if(object_id('t') is not null) drop table t go create table t(id int identity(1,1),name varchar(40)) go insert into t(name) select newid() go 10 select * from t /* 1 18C1C418-9029-4599-8D5E-616354A113C8 2 A0FE1177-09D8-4C56-9FB5-C2FA

  • sql中循环处理当前行数据和上一行数据相加减

    以下事例,使用游标循环表#temptable中数据,然后让当前行和上一行中的argument1 相加 存放到当前行的 argument2 中,比较简单. --drop table #temptable create table #temptable ( argument1 int, argument2 int, argument3 datetime ) declare @rowcount int,@argument1 int,@argument2 nvarchar(50),@argument3

  • mysql查询每小时数据和上小时数据的差值实现思路详解

    一.前言 需求是获取某个时间范围内每小时数据和上小时数据的差值以及比率.本来以为会是一个很简单的sql,结果思考两分钟发现并不简单,网上也没找到参考的方案,那就只能自己慢慢分析了. 刚开始没思路,就去问DBA同学,结果DBA说他不会,让我写php脚本去计算,,这就有点过分了,我只是想临时查个数据,就不信直接用sql查不出来,行叭,咱们边走边试. 博主这里用的是笨方法实现的,各位大佬要是有更简单的方式,请不吝赐教,评论区等你! mysql版本: mysql> select version(); +

  • 详解如何在Go语言中循环数据结构

    目录 如何在Go中循环字符串 如何在Go中循环map结构 如何在Go中循环Struct 数组是存储类似类型数据的强大数据结构.您可以通过索引识别和访问其中的元素. 在Golang中,您可以通过在0初始化变量i并增加变量直到它达到数组的长度,使用for循环循环数组. 它们的语法如下所示: for i := 0; i < len(arr); i++ { // perform an operation } 例如,让我们循环一个整数数组: package main import ( "fmt&qu

  • SQL中查找某几个字段完全一样的数据

    有以下一个表 movestar(id,name,title,address),内容为: 现在要查找所有具有相同的title和address的人 复制代码 代码如下: select star1.name,star2.name,star1.title,star1.address from movestar as star1,movestar as star2 where star1.title = star2.title     and star1.address = star2.address  

  • shell中循环调用hive sql 脚本的方法

    脚本tt.sh的内容如下: #!/bin/bash params=$1 for param in $params do echo $param done 运行方式为:sh tt.sh "1 2 3 4 5" 输出为: 1 2 3 4 5 所以参考上面的命令,可以把hql的脚本写为如下方式,就可以循环执行sql: 功能:查找字符串 comments 中的param第一次出现的位置 ,返回的是位置数字 #!/bin/bash params=$1 for param in $params d

  • 在SQL中对同一个字段不同值,进行数据统计操作

    应用场景: 需要根据印章的不同状态,统计不同状态下印章数量. 刚开始百度,确实写搜到了不同的答案,但只能怪自己对sql语法解读不够,还是没写出来,导致写出了下面错误的写法. select b.corporateOrgName, b.corporateOrgGuid companyId, count(case when bc.ftype not in(1,2) then 1 else 0 end ) total, count(case when bc.ftype in(3,4,5) then 1

  • 大数据Spark Sql中日期转换FROM_UNIXTIME和UNIX_TIMESTAMP的使用

    目录 UNIX_TIMESTAMP FROM_UNIXTIME 众所周知,数字整型用来大小比较和计算运算要比字符型快的多,因此部分业务需要把时间字段转化为整型方便业务的快速计算和到达,这个整形数字是选定的日期距UTC 时间 '1970-01-01 00:00:00' 开始的秒数,目前为十位,比如常用来举例的1234567890,但毕竟数字不方便观察,后续还需要把这些时间数字转换为真正的时间字段 这里就需要两个函数来进行转换UNIX_TIMESTAMP和FROM_UNIXTIME 咱们一一介绍 U

  • SQL中limit函数语法与用法(MYSQL获取限制某行数据)

    1.limit函数的语法和用法 (1)常用且简单的语法和用法 ①语法:limit n 即limit <参数> 具体语法:select <字段1>,...,<字段n> from <表名> (where <条件> order by <字段1>...<字段n> asc|desc) limit n 说明:括号内的语句可省略 参数说明: n:为阿拉伯数字,表示前n行. ②用法:用于获取前n行数据. (2)另一种(两个参数)语法和用法

  • 在SQL中修改数据的基础语句

    目录 什么是修改? 一.插入数据 基本语法 二.更新数据 基本语法 使用update语句的注意事项 三.删除语句 基本语法 注意事项 四.特别注意 补充:sql update语句根据不同条件修改不同列的值 什么是修改? 在SQL中的基本操作就是增删改查,查询语句不会对数据库中的数据进行修改. 而其余的三种操作都会对数据库进行修改,不管是什么修改,我们统称为修改. 一.插入数据 INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1, 值2, ...); 基本语法

  • 解析sql中得到刚刚插入的数据的id

    LAST_INSERT_ID:LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变.在多用户交替插入数据的情况下max(id)显然不能用. 这就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的 Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update

随机推荐