我有一个像这样的SQL 2008数据库表

name      score
-----------------------
steve     207
steve     205
steve     200
steve     139

我想知道这两排之间的差额.等式=[行-(行+1)] 所以我理想化地希望它是,

steve 2   //207 - 205
steve 5   //205 - 200
steve 61  //200 - 139
steve 139 //139 - 0

做这件事最好的方法是什么? 谢谢!

推荐答案

这是一种方法

with cte as
(SELECT
   ROW_NUMBER() OVER (PARTITION BY table.name ORDER BY id) row,
   name,
   score
 FROM table)
SELECT 
   a.name ,
   a.score - ISNULL(b.score,0)
FROM
   cte a
   LEFT  JOIN cte b
   on a.name = b.name
    and a.row = b.row+1

Database相关问答推荐

包含接受Cassandra中多个数据的语句

Prisma - 将属性的类型设置为枚举数组

创建数据库索引有哪些最佳实践和经验法则?

复合主键

SQL Server 中的Is Identity列属性是什么意思?

免费的 SQL 比较工具

当您达到 SQL Server Express 4GB / 10GB 限制时会发生什么?

从 XML 读取数据

在 MySQL 中查看表以进行更改?

被删除的行占用的空间会被重新使用吗?

触发器内的多个插入/更新语句?

设置默认数据库连接 Rails

C# 数据连接最佳实践?

如何删除 SQLite 中具有多个 where 参数的行?

不可重复读与脏读的区别

mySQL 复制是否具有即时数据一致性?

如何将 DECIMAL 插入 MySQL 数据库

我应该混淆用户的数据库 ID 吗?

复制没有 LOCK 权限的 postgres 数据库

我可以在 /sdcard 上下载 SQLite 数据库并从我的 Android 应用程序访问它吗?