MySQL 只计算同一组中行的行差异

标签 mysql

我有下表(称之为反式):

issue_id:   state_one:  state_two:  timer:      
1           A           B           1
1           B           C           3

2           A           B           2
2           B           C           4
2           C           D           7

我希望获得连续行之间“计时器”的差异,但仅限于具有相同 issue_id 的行。

预期结果:

issue_id:   state_one:  state_two:  timer:    time_diff:                 
1           B           C           3         2

2           B           C           4         2
2           C           D           7         3

当计算两行之间的时间差时,我希望结果显示在后面一行的旁边。

如果表中只有一个按时间排序的问题,则以下代码可以正常工作:

select 
    X.issue_id, 
    X.timer as X_timer,  
    Y.timer as Y_timer, 
    (X.timer - Y.timer) as time_diff
from trans X
cross join trans Y
where Y.timer in (
    select 
        max(Z.timer)
    from trans Z
    where Z.timer < X.timer);

我想推广这种方法来处理许多具有时间顺序状态更改的问题。

我的想法是添加以下条件,但它仅在连续事件属于同一问题时才有效(现实世界中并非如此):

... where Z.timer < X.timer)
and X.issue_id = Y.issueid;

问题:在 MySQL 中,我可以迭代地执行此操作(即计算 issue_id=1 的差异,然后计算 issue_id=2 的差异,依此类推)吗?函数还是子查询?

其他策略?约束:我有只读权限。非常感谢您的帮助!

编辑:我添加了预期的输出,在我的示例表中添加了一行,并进行了说明。

最佳答案

select 
issue_id, (MAX(timer)-MIN(timer)) as diff from trans
group by issue_id

关于MySQL 只计算同一组中行的行差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37153107/

相关文章:

mysql - mysql中使用union按日期格式排序

php - 更新语句不更新表而是将新条目插入表中

MySQL INSERT INTO - "("在此位置无效

javascript - SQL排行榜问题nodejs discord.js

mysql - 查询大于特定院系最小值的教授和薪资

php - 在 PHP 上执行 mysql 级联删除

python - SQLAlchemy select_from 单个表

php - mysql 按另一列计算不同的行并对结果进行分组

php - mySQL 创建未知数量值的 INSERT 存储过程

mysql - 使用当天的mysql创建CSV文件