需要下面的帮助,我需要检查一天中两次以上进入的帐号。下面是我的查询,我得到的结果是来自FAILURE的两次以上的帐号并非来自成功。我需要两者兼得。任何帮助表示赞赏。
样本数据:
04/28/2020 123345 BERLIN 5645756768 SUCCESS
04/28/2020 123346 BERLIN 5645756768 FAILURE
04/28/2020 123344 BERLIN 5645756762 SUCCESS
04/28/2020 123345 BERLIN 5645756763 FAILURE
04/28/2020 123346 BERLIN 5645756764 SUCCESS
04/28/2020 123347 BERLIN 5645756766 FAILURE
Query:
SELECT
DATE,
ID,
NAME,
ACCOUNT,
STATUS
FROM
(
SELECT
T1.DATE AS DATE,
T1.ID AS ID,
T1.NAME AS NAME,
T2.ACCOUNT_NUMBER AS ACCOUNT,
T2.STATUS AS STATUS,
COUNT(1) OVER (PARTITION BY T2.ACCOUNT_NUMBER, DATE(DATE) CNT
FROM TABLE1 AS T1
JOIN TABLE2 AS T2
ON T2.ID = T1.ID
WHERE STATUS = 'SUCCESS'
GROUP BY T1.ID, T1.NAME,T2.ACCOUNT_NUMBER,T2.STATUS
UNION ALL
SELECT
T1.DATE AS DATE,
T1.ID AS ID,
T1.NAME AS NAME,
T2.ACCOUNT_NUMBER AS ACCOUNT,
T2.STATUS AS STATUS,
COUNT(1) OVER (PARTITION BY T2.ACCOUNT_NUMBER, DATE(DATE) CNT
FROM TABLE1 AS T1
JOIN TABLE2 AS T2
ON T2.ID = T1.ID
WHERE STATUS = 'FAILED'
GROUP BY T1.ID, T1.NAME,T2.ACCOUNT_NUMBER,T2.STATUS
)
WHERE CNT > 2;'
预期输出:
04/28/2020 123345 BERLIN 5645756768 SUCCESS
04/28/2020 123346 BERLIN 5645756768 FAILURE
消除UNION并仅在WHERE中使用IN子句会容易得多。
[状态”(“成功”,“失败”)中的位置
一个简单的解决方法-针对您所描述的Moe复杂查询-可能是分隔cnt列。在第一部分中使用cnt_success,在第一部分中使用0作为cnt_failure,在第二部分中使用cercer。
因此您可以在主/外部查询中过滤到
cnt_success >=1 and cnt_failure >=1
这种问题也可以通过联接来解决。