【发布时间】:2019-04-05 17:29:13
【问题描述】:
我有一个“每日更改”表,用于记录客户“升级”或“降级”其会员级别的时间。在表格中,假设字段 1 是客户 ID,字段 2 是会员类型,字段 3 是更改日期。客户 123 和 ABC 在表中各有两行。字段 1 (ID) 中的值相同,但字段 2 (TYPE) 和字段 3 (DATE) 中的值不同。我想编写一个 SQL 查询来告诉我在任何给定时间范围内,有多少客户从会员类型 1“升级”到会员类型 2,有多少客户从会员类型 2“降级”到会员类型 1。
该表还显示了其他类型的更改。为了识别成员类型字段中发生更改的记录,我创建了以下代码:
SELECT *
FROM member_detail_daily_changes_new
WHERE customer IN (
SELECT customer
FROM member_detail_daily_changes_new
GROUP BY customer
HAVING COUNT(distinct member_type_cd) > 1)
我想看一个告诉我的结束报告:
对于 2018 财年, X,XXX 客户从会员类型 1 转移到会员类型 2,并且 X,XXX 客户从会员类型 2 转移到会员类型 1
【问题讨论】:
-
如果客户在同一年从类型 1 更改为 2 并再次更改为 1 会发生什么?
-
有可能。我确实看到了几行,其中一位客户在表中有三行或更多行。我想在这些情况下,我需要计算从第一行到第二行的变化以及从第二行到第三行的变化,使用日期字段来指示变化的顺序。
-
那么同一个客户将同时计入两个类别?
-
好问题。我想我想为同一个客户捕捉这两个动作。所以是的,他会被算作一次升级和一次降级。
-
如果其他人想随意使用创建的DEMO 来模拟答案!无需在测试数据上重新发明轮子!