有一个表,其中包含有关银行中所有客户交易的数据。
万一卡被盗(例如借记卡),该不法之徒很可能会尽可能少地提取尽可能多的钱,以免被怀疑。因此,银行想知道是否连续三笔交易超过10000次,那么这就是欺诈。
每位客户一天可能有100笔交易,但每天只考虑每位客户连续三笔交易(任何三笔交易可能是1,2,3或7,8,9等)。
表中的数据如下:
cid trans_date trans_time amount 1 1/15/2018 9:21:33 4000 1 1/15/2018 9:21:34 12000 1 1/15/2018 9:35:33 11000 1 1/15/2018 10:21:33 10000 2 2/17/2018 11:21:33 10000 2 2/18/2018 9:21:33 10000 2 3/18/2018 9:21:33 10000 3 1/15/2018 9:23:33 4000 3 1/15/2018 9:24:33 9000 3 1/15/2018 9:25:33 10000 3 1/15/2018 9:26:33 14000 3 1/15/2018 9:27:33 4000 3 2/18/2018 9:21:33 10000 3 2/18/2018 9:22:33 13000 4 1/15/2018 9:21:33 4000 4 1/15/2018 9:22:33 10000 4 1/15/2018 9:23:33 12000 4 1/15/2018 9:24:33 4000 4 1/15/2018 9:25:33 2000 4 1/15/2018 9:26:33 60000 4 1/15/2018 9:27:33 10000
输出应为满足以下条件的cid:cid1。不应考虑cid 2,因为一天中只有两次连续的事务发生。当然3和4不满足条件。
我尝试了以下查询,但没有得到想要的结果。
select distinct bb.cid from ( select cid, count(case when amount>=10000 then 1 else 0 end) over(partition by cid,trans_date order by trans_time rows between current row and 2 following) cn from testtable ) bb where cn >= 3
我正在使用Teradata v16数据库。
答案 0 :(得分:2)
COUNT计算非NULL值,但是您的CASE始终返回一个值( 0/1 )。删除else 0
或切换到SUM
。此外,您可以使用QUALIFY摆脱衍生表:
select distinct cid
from testtable
qualify
SUM(case when amount>=10000 then 1 else 0 end)
over(partition by cid, trans_date order by trans_time
rows 2 preceding) = 3