条款在同一列两次出现,但条件不同

时间:2019-09-07 13:50:40

标签: mysql sql

表1:座席数据:存储座席详细信息的位置 代理表格

Agent_Id    Name
1   Vijay
2   Rajesh
3   Satish
4    Anji

表2:Case_transaction_details:存储后端操作中的每个步骤。 Case_transaction_details

Case_Id Stage   Login_Time  Logout_time Agent_id    Status
101 Maker   5/11/2019 10:20 10:30   2   Success
102 Maker   10:25   10:35   1   Success
103 Maker   10:40   10:50   2   Success
101 Checker 10:45   11:00   3   Success
101 Approver    11:15   11:30   2   Success
102 Checker 10:50   11:00   1   Reject
102 Maker   11:15   11:45   4   Reverify
103 Checker 11:30   11:40   2   Reject

问题是如何获取被检查者拒绝但仍未验证的案例ID?

SELECT Case_Id 
FROM Case_transaction_detail  
WHERE Status = 'Reject' and status != 'Reverify';

如何在同一列上两次应用where子句?

尝试上述查询可同时提供

102
103

答案应该只有103

6 个答案:

答案 0 :(得分:2)

您可以使用:

private long startTime = 0;
@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);

        if(hasFocus){
            long time = System.currentTimeMillis() - starTime;
            //300.000 ms = 5 min
            if(time > startTime + 300000)
            {
                Intent intent = new Intent(this, LoginActivity.class);
                startActivity(intent);
            }
        }
        else
        {
            starTime = System.currentTimeMillis();
        }
    }

答案 1 :(得分:0)

我认为您想要汇总:

SELECT Case_Id 
FROM Case_transaction_detail  
GROUP BY Case_Id
HAVING SUM(Status = 'Reject') > 0 AND
       SUM(status = 'Reverify') = 0;

MySQL将布尔条件视为数字上下文中的数字,其中“ 1”代表真,“ 0”代表假。因此,第一个条件计算不合格品的数量; > 0说至少有一个。

类似地,第二条件计算每种情况下重新验证​​的次数。 = 0说没有。

答案 2 :(得分:0)

您可以使用简单的LEFT JOIN来做到这一点。

基本上,您将从表中选择所有拒绝的CaseId,然后使用CaseId仅选择与之相关联的经验证的表来离开同一张表。

您想要的人将是左联接关系(关联的经过验证的)为NULL的人。

SELECT CaseRejected.Case_Id 
FROM Case_transaction_detail CaseRejected
LEFT JOIN Case_transaction_detail CaseReverified ON (CaseReverified.Case_Id = CaseRejected.Case_Id AND CaseReverified.Status = 'Reverify') 
WHERE CaseRejected.Status = 'Reject'
AND CaseReverified.Case_Id IS NULL;

答案 3 :(得分:0)

一种方法是在HAVING子句中测试同质性

SELECT Case_Id 
FROM Case_transaction_detail  
GROUP BY Case_Id
HAVING AVG(Status='Rejected')=1

另一种方法基本上是使用GROUP_CONCAT的黑客行为

SELECT Case_Id 
FROM Case_transaction_detail  
GROUP BY Case_Id
HAVING GROUP_CONCAT(DISTINCT Status))='Rejected'

答案 4 :(得分:0)

SELECT 
    case_id
FROM
    case_transaction_details
WHERE
    status = 'Reject'
        AND status <> 'Reverify';

答案 5 :(得分:-1)

SELECT Case_Id

FROM case_transaction_details

GROUP BY Case_Id

HAVING SUM(Status = 'Reject') - SUM(status = 'Reverify') = 1