在 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 函数为日期和客户的每个不同组合创建一个标志,如果客户在这两天都在场,则该标志将是 1
或 0
如果不是并汇总:
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。
鉴于此 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 函数为日期和客户的每个不同组合创建一个标志,如果客户在这两天都在场,则该标志将是 1
或 0
如果不是并汇总:
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。