我正在尝试从数据库中提取统计信息。 表的结构是:
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卡住了:)
选择a.product_name,a.revenue,b.revenue,b.revenue- a.revenue作为与updated_stats a,updated_stats b的区别,其中a.product_name = b.product_name和b.revenue =(选择min(收益))来自updated_stats,其中product_name = a.product_name,收入> a.revenue和product_name ='Product1')
你能告诉我,应该如何查询?感谢。
答案 0 :(得分:2)
我会使用相关子查询来执行此操作:
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;
注意:对于970,这会返回NULL
而不是0.这实际上对我来说更有意义。但您可以使用COALESCE()
或类似函数将其变为0。
如果updated_stats
的大小适中,您需要updated_status(product_name, updated_id, revenue)
上的索引。该索引涵盖子查询。