MySQL:获取行集中每个排序列的差异

标签 mysql stored-procedures

这是一个带有表格字符的简单场景:

CharacterName GameTime Gold Live
Foo 10 100 3 
Foo 20 100 2 
Foo 30 95 2

我如何获得查询 SELECT Gold, Live FROM characters WHERE name = 'Foo' ORDER BY GameTime 的输出:

Gold Live
100 3
0 -1
-5 0

如果可能的话,使用 MySQL 存储过程(或查询)?我想过使用 2 个数组,就像在服务器端语言中通常使用的那样,但 MySQL 没有数组类型。

虽然我知道用 PHP(我的服务器端语言)做起来可能更容易,但我想知道是否可以用 MySQL 做,就像学习 Material 一样。

最佳答案

你的 table 上有身份证吗?

GameID      CharacterName GameTime    Gold        Live
----------- ------------- ----------- ----------- -----------
1           Foo           10          100         3
2           Foo           20          100         2
3           Foo           30          95          2

如果是这样,您可以对自身进行交错连接

SELECT
    c.CharacterName, 
    CASE WHEN c_offset.Gold IS NOT NULL THEN c.Gold - c_offset.Gold ELSE c.Gold END AS Gold,
    CASE WHEN c_offset.Live IS NOT NULL THEN c.Live - c_offset.Live ELSE c.Live END AS Live
FROM Characters c 
    LEFT OUTER JOIN Characters c_offset
        ON c.GameID - 1 = c_offSet.GameID
ORDER BY
    c.GameTime

本质上,它将每个游戏行连接到前一个游戏行,并在值之间进行差异。这会为我返回以下内容。

CharacterName Gold        Live
------------- ----------- -----------
Foo           100         3
Foo           0           -1
Foo           -5          0

关于MySQL:获取行集中每个排序列的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/257190/

相关文章:

mysql - 从表中删除 MySQL 列名中的所有空格?

sql - 带有 OUT 参数的 PostgreSQL 函数和带有 TABLE 结果的 PostgreSQL 函数之间有任何形式上的区别吗?

mysql - IF 语句格式不正确,不知道如何修复

php - 使用 echo 在 PHP 的 URL 中发送变量

php - 如何用php在jquery中添加删除功能?

mysql - 在mysql中插入36个字符的哈希值

Mysql存储过程返回一些奇怪的结果

mysql - 错误 sqoop.Sqoop : Got exception running Sqoop: java. lang.RuntimeException : Could not load db driver class: com. mysql.jdbc.Driver

mysql - 选择树节点的所有后代

sql-server - 如何使用 sqlcmd.exe 调用带有参数的存储过程?