SQL 查询 CASE 子句,当相同 MemberNumber 的 TransactionDate 之间 > 180 天时

问题描述 投票:0回答:1

可能是一个简单的请求,但像我这样的菜鸟似乎无法弄清楚。

我只需要一个查询,当每个 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
sql case datediff
1个回答
0
投票

使用滞后,您可以获得会员编号之前的交易日期

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 休眠
© www.soinside.com 2019 - 2024. All rights reserved.