【发布时间】:2019-11-27 14:22:08
【问题描述】:
输入:
| cust_no | month_nr | resource| segment |
|---------|----------|---------|---------|
| 1 | jan-18 | r3 | s1 |
| 1 | feb-18 | r4 | s1 |
| 1 | mar-18 | r2 | s1 |
| 1 | apr-18 | r3 | s1 |
| 1 | jun-18 | r7 | s1 |
| 2 | may-18 | r4 | s2 |
| 2 | jun-18 | r2 | s2 |
| 2 | aug-18 | r3 | s3 |
| 2 | sep-18 | r2 | s4 |
| 2 | oct-18 | r4 | s4 |
| 2 | nov-18 | r1 | s4 |
| 3 | sep-18 | r7 | s2 |
| 3 | oct-18 | r9 | s1 |
| 3 | nov-18 | r2 | s3 |
期望输出:
| cust_no | month_nr | resource| segment |
|---------|----------|---------|---------|
| 1 | jan-18 | r3 | s1 |
| 2 | may-18 | r4 | s2 |
| 2 | jun-18 | r2 | s2 |
| 2 | aug-18 | r3 | s3 |
| 2 | sep-18 | r2 | s4 |
| 3 | sep-18 | r7 | s2 |
| 3 | oct-18 | r9 | s1 |
| 3 | nov-18 | r2 | s3 |
我想过滤掉出现特定列值(段)的客户记录持续保持不变超过 2 次,并在输出中保留第一次出现的行。
根据以上样本数据:
- 客户 1 有 5 个连续 s1 段:保留客户 1 的第一行输出;
- 客户 2 有 3 个继续 s4 段:保留第 1 个 s4 段行;并保持s2段(连续2次)和s3段(1次)输出不变
- 客户 3 记录在输出中保持不变,因为没有段值保持不变超过 2 次。
有什么建议吗?
【问题讨论】:
-
您的 month_nr 列真的是一个日期,已在您显示的输出中转换为字符串吗?如果将其存储为字符串,则查找最早日期会变得更加棘手。您必须将其转换回可以运行 min 或 max 函数的东西。您需要在 where 子句中使用子查询。从
删除 where month_nr != ( select min(x.month_nr) from
as X where X.segment =
.segment group by x.segment)。但是 min() 不适用于月份字符串。当然
是你的表名。
星号是您试图在 SO 中使代码加粗的吗? (只是好奇)这张表的主键列是什么?是的@CaiusJard。只是想强调理解为什么 cust_no2segements2返回了两行?
标签: sql duplicates teradata