MySql Select - 行减去前一行

MySql Select - row subtract previous row

我正在尝试从数据库中提取统计信息。 Table的结构是:

UpdatedId product_name   revenue
980       Product1       1000
975       Product1       950
973       Product1       900
970       Product1       800
965       Product21      1200

所以收入 = 以前的收入 + 新的收入。

为了制作图表,目标是像这样获得 Product1 的输出

UpdateId  Difference
980       50 
975       50 
973       100 
970       0 

我尝试了这个查询,但 MySQL 卡住了 :)

select a.product_name, a.revenue, b.revenue, b.revenue- a.revenue 不同于 updated_stats a, updated_stats b where a.product_name=b.product_name and b.revenue= (select min(revenue) from updated_stats where product_name=a.product_name 和收入 > a.revenue 和 product_name= 'Product1')

请问应该怎么查询?谢谢

我会用相关的子查询来做到这一点:

select u.*,
       (select u.revenue - u2.revenue
        from updated_stats u2
        where u2.product_name = u.product_name and
              u2.updatedid < u.updatedid
        order by u2.updatedid desc
        limit 1
       ) as diff
from updated_stats u;

注意:这个 returns NULL 而不是 970 的 0。这对我来说实际上更有意义。但是您可以使用 COALESCE() 或类似的函数将其变成 0.

如果 updated_stats 大小适中,您将需要 updated_status(product_name, updated_id, revenue) 上的索引。该索引涵盖了子查询。