接上篇:MySQL8.0 ROW_NUMBER 调用案例: link
1、将销售额 向后滚动,得到前一次的销售额 进行比较
SELECT
t.shopname, -- 商店名称
t.sales, -- 销售额
t.sale_date, -- 销售日期
-- 使用窗口函数LAG()来获取每个商店前一次的销售额
--lag(sales,1)表示将sales 列向后移动1行,即得到前一次的销售额
lag(t.sales,1) over(PARTITION by shopname ORDER BY sale_date) as lag_value
FROM
chapter11 t;
2、计算差值
-- 主查询
SELECT
shopname, -- 商店名称
sale_date, -- 销售日期
sales, -- 销售额
lag_value, -- 前一次的销售额(基于shopname和sale_date分组)
sales - lag_value AS sales_difference -- 当前销售额与前一次销售额的差异
FROM (
-- 子查询
SELECT
t.shopname, -- 商店名称
t.sale_date, -- 销售日期
t.sales, -- 销售额
LAG(t.sales, 1) OVER(PARTITION BY shopname ORDER BY sale_date) AS lag_value -- 使用窗口函数LAG获取每个商店前一次的销售额
FROM
chapter11 t -- 从chapter11表中选择数据,别名为t
) AS subquery; -- 子查询的别名是subquery
3、将销售额 向前滚动,得到前一次的销售额 进行比较
-- 主查询
SELECT
t.shopname, -- 商店名称
t.sales, -- 销售额
t.sale_date, -- 销售日期
LEAD(t.sales, 1) OVER(PARTITION BY shopname ORDER BY sale_date) AS lead_value -- 使用窗口函数LEAD获取每个商店下一次的销售额
FROM
chapter11 t; -- 从chapter11表中选择数据,别名为t
4、计算差值
-- 主查询
SELECT
shopname, -- 商店名称
sale_date, -- 销售日期
sales, -- 销售额
lead_value, -- 下一次的销售额(基于shopname和sale_date分组)
lead_value - sales AS sales_difference -- 当前销售额与下一次销售额的差异
FROM (
-- 子查询
SELECT
t.shopname, -- 商店名称
t.sales, -- 销售额
t.sale_date, -- 销售日期
LEAD(t.sales, 1) OVER(PARTITION BY shopname ORDER BY sale_date) AS lead_value -- 使用窗口函数LEAD获取每个商店下一次的销售额
FROM
chapter11 t -- 从chapter11表中选择数据,别名为t
) AS subquery; -- 子查询的别名是subquery