如何检查前3个月和接下来3个月的数据

时间:2019-06-12 18:07:40

标签: sql sql-server sql-server-2016

我正在处理电信数据。所以基本上我有手机号码,并且我需要一个具有以下条件的标志(是/否)。

如果是,则标记为“是”

  1. 发票月必须至少为3个月
  2. Total_Minutes_Used = 0
  3. Total_Data_Usage_MB = 0
  4. 如果在接下来的3个月(如果要检查+-3个月)中Total_Minutes_Used = 0或Total_Data_Usage_MB = 0,则为'否'

样本数据

Mobile Number  Invoice_Month Total_Minutes_Used Total_Data_Usage_MB
------------- -------------- ------------------ -------------------
9112222210          01-2019     0                 0
9112222210          02-2019     0                 0
9112222210          03-2019     0                 45
9112222210          04-2019     0                 0
9112222211          01-2019     0                 0
9112222211          02-2019     0                 0
9112222211          03-2019     0                 0
9112222211          04-2019     0                 0
9112222212          01-2019     0                 0
9112222212          02-2019     0                 0
9112222212          03-2019     0                 0
9112222212          04-2019     0                 50

预期产量

Mobile Number  Invoice_Month Total_Minutes_Used Total_Data_Usage_MB       Flag
------------- -------------- ------------------ -------------------       ----
9112222210          01-2019     0                 0      N
9112222210          02-2019     0                 0      N
9112222210          03-2019     0                 45     N
9112222210          04-2019     0                 0      N
9112222211          01-2019     0                 0      N
9112222211          02-2019     0                 0      N
9112222211          03-2019     0                 0      Y
9112222211          04-2019     0                 0      Y
9112222212          01-2019     0                 0      N
9112222212          02-2019     0                 0      N
9112222212          03-2019     0                 0      N
9112222212          04-2019     0                 50     N

我在LEAD和LAG上进行了尝试,但无法正常工作。

1 个答案:

答案 0 :(得分:0)

您可以尝试

select *, 
case when Invoice_Month <= DATEADD(mm, -3, GETDATE()) AND
          Total_Minutes_Used=0 AND
          Total_Data_Usage_MB=0 AND
          Total_Minutes_Used=0 OR Total_Data_Usage_MB=0 THEN "YES"
          ELSE "NO"
          END AS FLAG 
FROM TABLE_NAME;