如何用LAG函数实现SQL查询,找出连续三个月销售增长的所有客户?

2026-04-29 01:311阅读0评论SEO资讯
  • 内容介绍
  • 相关推荐

本文共计842个文字,预计阅读时间需要4分钟。

如何用LAG函数实现SQL查询,找出连续三个月销售增长的所有客户?

直接使用一次LAG函数只能得到上个月的值,无法判断连续三个月增长。必须使用三次LAG函数分别取出前1、2、3个月的销售额,再在WHERE或CASE语句中进行比较。

常见错误是写成 LAG(sales) > LAG(sales, 2) —— 这实际比的是“上月 > 上上月”,漏了“本月 > 上月”这一环,结果会多出大量假阳性。

正确逻辑是:当前月 sales > 上月 AND 上月 > 上上月 AND 上上月 > 上上上月。对应 SQL 要显式写出三个 LAG 列:

SELECT customer_id, order_month, sales, LAG(sales, 1) OVER (PARTITION BY customer_id ORDER BY order_month) AS prev1, LAG(sales, 2) OVER (PARTITION BY customer_id ORDER BY order_month) AS prev2, LAG(sales, 3) OVER (PARTITION BY customer_id ORDER BY order_month) AS prev3 FROM sales_data

为什么 PARTITION BY customer_id 和 ORDER BY order_month 缺一不可?

不加 PARTITION BY customer_idLAG 会在全表范围内错位取值,比如把客户 A 的 3 月值当成客户 B 的 2 月值;不按 ORDER BY order_month 排序,时间顺序乱掉,连续性判断彻底失效。

阅读全文

本文共计842个文字,预计阅读时间需要4分钟。

如何用LAG函数实现SQL查询,找出连续三个月销售增长的所有客户?

直接使用一次LAG函数只能得到上个月的值,无法判断连续三个月增长。必须使用三次LAG函数分别取出前1、2、3个月的销售额,再在WHERE或CASE语句中进行比较。

常见错误是写成 LAG(sales) > LAG(sales, 2) —— 这实际比的是“上月 > 上上月”,漏了“本月 > 上月”这一环,结果会多出大量假阳性。

正确逻辑是:当前月 sales > 上月 AND 上月 > 上上月 AND 上上月 > 上上上月。对应 SQL 要显式写出三个 LAG 列:

SELECT customer_id, order_month, sales, LAG(sales, 1) OVER (PARTITION BY customer_id ORDER BY order_month) AS prev1, LAG(sales, 2) OVER (PARTITION BY customer_id ORDER BY order_month) AS prev2, LAG(sales, 3) OVER (PARTITION BY customer_id ORDER BY order_month) AS prev3 FROM sales_data

为什么 PARTITION BY customer_id 和 ORDER BY order_month 缺一不可?

不加 PARTITION BY customer_idLAG 会在全表范围内错位取值,比如把客户 A 的 3 月值当成客户 B 的 2 月值;不按 ORDER BY order_month 排序,时间顺序乱掉,连续性判断彻底失效。

阅读全文