可能是一个简单的请求,但像我这样的菜鸟似乎无法弄清楚。
我只需要一个查询,当每个 MemberNumber 的 TransactionDate 之间存在 > 180 天时生成结果。这是我到目前为止所拥有的,但它无法正常工作:
SELECT [TransactionDate]
,[MemberNumber]
,[MemberName]
,[PrincipalAmount]
,[TransactionCategory]
,[TransactionChannel]
,[Service]
,[Product]
,
CASE
WHEN DATEDIFF(day, TransactionDate, TransactionDate) > 180
AND MemberNumber = MemberNumber THEN 'Dormant'
ELSE 'Active'
END AS Dormant_Flag
使用滞后,您可以获得会员编号之前的交易日期
SELECT [TransactionDate]
,[MemberNumber]
,[MemberName]
,[PrincipalAmount]
,[TransactionCategory]
,[TransactionChannel]
,[Service]
,[Product]
, LAG(TransactionDate) OVER (Partition BY [MemberNumber] ORDER BY TransactionDate) as PreviousTransactionDate
,DATEDIFF(Day, LAG(TransactionDate) OVER (Partition BY [MemberNumber] ORDER BY TransactionDate) , TransactionDate) as diff
,CASE
WHEN DATEDIFF(Day, LAG(TransactionDate) OVER (Partition BY [MemberNumber] ORDER BY TransactionDate) , TransactionDate) > 180
THEN 'Dormant'
ELSE 'Active'
END AS Dormant_Flag
FROM Example
交易日期 | 会员号码 | 会员姓名 | 本金金额 | 交易类别 | 交易通道 | 服务 | 产品 | 上一笔交易日期 | 差异 | 休眠_标志 |
---|---|---|---|---|---|---|---|---|---|---|
2024-01-01 | 1 | 鲍勃 | 1 | 1 | 1 | 1 | 1 | 空 | 空 | 活跃 |
2024-01-03 | 1 | 鲍勃 | 1 | 1 | 1 | 1 | 1 | 2024-01-01 | 2 | 活跃 |
2024-02-03 | 1 | 鲍勃 | 1 | 1 | 1 | 1 | 1 | 2024-01-03 | 31 | 活跃 |
2024-06-03 | 1 | 鲍勃 | 1 | 1 | 1 | 1 | 1 | 2024-02-03 | 121 | 活跃 |
2024-01-03 | 2 | 安 | 1 | 1 | 1 | 1 | 1 | 空 | 空 | 活跃 |
2024-09-04 | 2 | 安 | 1 | 1 | 1 | 1 | 1 | 2024-01-03 | 245 | 休眠 |