如何创建带Success count列的SQL视图?基于同A Id行判断
实现方法
假设你的原表名为ticket_table,可以通过以下SQL语句创建符合要求的视图:
CREATE VIEW ticket_view AS SELECT `A Id(A编号)`, `B session Id(B会话ID)`, `C customer Type(C客户类型)`, `D ticket status(D工单状态)`, CASE WHEN `D ticket status(D工单状态)` = 'Success' AND SUM(CASE WHEN `C customer Type(C客户类型)` = 'vip' THEN 1 ELSE 0 END) OVER (PARTITION BY `A Id(A编号)` ORDER BY `B session Id(B会话ID)` ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) > 0 THEN 1 ELSE 0 END AS `E(Success count)` FROM ticket_table;
关键逻辑解释
- 分组范围:
PARTITION BYA Id(A编号)`` 确保只在同一个A编号的范围内计算前置行。 - 行顺序确定:
ORDER BYB session Id(B会话ID)`` 用来定义行的先后顺序(如果表中有时间戳这类更精准的排序字段,建议替换这里的会话ID)。 - 前置vip判断:
SUM(...) OVER (...)会统计当前行之前所有行里客户类型为vip的数量,数量大于0就说明存在前置vip行。 - 结果赋值:通过
CASE WHEN同时判断两个条件——当前工单状态为Success,且存在前置vip行,满足则返回1,否则返回0。
结果验证
执行上述语句后,生成的视图会完全匹配你给出的目标结构:
- First组的B、C行因为状态是Success且前置有vip行,返回1;
- Second组的D行虽然状态是Success,但没有前置vip行,返回0;
- 其余状态为Failed的行都返回0。
内容的提问来源于stack exchange,提问作者Senthil
相关产品推荐
相关产品推荐

