在 mysql 中领导 window 功能以查找销售

Lead window function in mysql to find sales

鉴于此 table。我想知道每天有多少不同的客户在日期 t 和 t+1 进行了销售。

-- create a table
CREATE TABLE sales_t(
  id INTEGER PRIMARY KEY,
  d_date date NOT NULL,
  sale INT NOT NULL,
  customer_n INT NOT NULL
);
-- insert some values
INSERT INTO sales_t VALUES (1, '2021-06-30', 12,  1);
INSERT INTO sales_t VALUES (2, '2021-06-30', 22,  5);
INSERT INTO sales_t VALUES (3, '2021-06-30', 111,  3);
INSERT INTO sales_t VALUES (4, '2021-07-01', 27, 1);
INSERT INTO sales_t VALUES (5, '2021-07-01', 90, 4);
INSERT INTO sales_t VALUES (6, '2021-07-01', 33, 3);
INSERT INTO sales_t VALUES (6, '2021-07-01', 332, 3);

日期 2021-06-30 的结果是 2,因为客户 1 和 3 在 t 和 t+1 进行了销售。

Date          sale_t_and_t+1
.....................................
2021-06-30             2 
2021-07-01             0

使用 LEAD() window 函数为日期和客户的每个不同组合创建一个标志,如果客户在这两天都在场,则该标志将是 10 如果不是并汇总:

SELECT d_date, COALESCE(SUM(flag), 0) `sale_t_and_t+1`
FROM (
  SELECT DISTINCT d_date, customer_n,
         LEAD(d_date) OVER (PARTITION BY customer_n ORDER BY d_date) = d_date + INTERVAL 1 DAY flag
  FROM sales_t
) t
GROUP BY d_date;

参见demo