MySQL 基于两列的高级计算

MySQL advanced calculation based on two columns

我正在尝试弄清楚是否可以使用 MySQL workbench 为我提供一些基于 id、statement_one 和 [=36] 的高级计算=]. 我的基地 table 看起来像这样:

基本上我希望测试列如下所示:

有人知道我可以使用哪个函数来创建计算基于每个 id 的 statement_one 和 last_statement 范围? 预先感谢您你的帮助!

您可以尝试这样的查询:

首先我得到 first_statement (MIN) 和 last_statement (MAX) 对于每个 id,然后我 JOIN cte 子查询与原始 table 并使用 CASE 语句计算 test 列。

MySql >= 8.0

WITH cte AS (SELECT id,  MIN(statement_one) AS fs, MAX(latest_statement) AS ls
             FROM t
             GROUP BY id)
             
SELECT *,
       CASE WHEN quarter >= cte.fs AND quarter <= cte.ls THEN 1 ELSE 0 END AS test
FROM t
INNER JOIN cte ON t.id = cte.id;

MySql < 8.0

SELECT *,
       CASE WHEN quarter >= sq.fs AND quarter <= sq.ls THEN 1 ELSE 0 END AS test
FROM t
INNER JOIN (SELECT id,  MIN(statement_one) AS fs, MAX(latest_statement) AS ls
             FROM t
             GROUP BY id) AS sq ON t.id = sq.id;
id quarter statement_one latest_statement id fs ls test
1 2019Q1 1 2019Q3 2021Q2 0
1 2019Q2 1 2019Q3 2021Q2 0
1 2019Q3 2019Q3 1 2019Q3 2021Q2 1
1 2019Q4 1 2019Q3 2021Q2 1
1 2020Q1 1 2019Q3 2021Q2 1
1 2020Q2 1 2019Q3 2021Q2 1
1 2020Q3 1 2019Q3 2021Q2 1
1 2020Q4 1 2019Q3 2021Q2 1
1 2021Q1 1 2019Q3 2021Q2 1
1 2021Q2 2021Q2 1 2019Q3 2021Q2 1
1 2021Q3 1 2019Q3 2021Q2 0
1 2021Q4 1 2019Q3 2021Q2 0
22 2019Q1 22 2019Q2 2021Q3 0
22 2019Q2 2019Q2 22 2019Q2 2021Q3 1
22 2019Q3 22 2019Q2 2021Q3 1
22 2019Q4 22 2019Q2 2021Q3 1
22 2020Q1 22 2019Q2 2021Q3 1
22 2020Q2 22 2019Q2 2021Q3 1
22 2020Q3 22 2019Q2 2021Q3 1
22 2020Q4 22 2019Q2 2021Q3 1
22 2021Q1 22 2019Q2 2021Q3 1
22 2021Q2 22 2019Q2 2021Q3 1
22 2021Q3 2021Q3 22 2019Q2 2021Q3 1
22 2021Q4 22 2019Q2 2021Q3 0