提问人:Andy P James 提问时间:8/15/2023 最后编辑:Ankit JindalAndy P James 更新时间:8/17/2023 访问量:37
返回多行,其中数据库中的计数在 2 列上超过 1 个匹配项。如果两列在另一行中匹配,则返回两行
Return multiple rows where count in the Database is more than 1 matching on 2 columns. If BOTH columns match in another row, return both rows
问:
我正在查询我们的 IT 服务管理系统,并希望带回符合以下条件的工单。
- 一定是事件
- 必须处于打开状态
- 记录它的用户必须打开另一个具有相同问题类型 (probcode) 的票证
这是我遇到问题的 3 个。我可以轻松识别具有 1 个以上未结票证的用户,但无法弄清楚如何同时过滤该票证和概率码。
我尝试使用下面的 SQL 识别符合条件的工单,但它仍然带回了用户拥有多个未结工单的工单,而不管他们的另一张工单是否具有相同的概率码。
(
SELECT Cust_ID
FROM opencall
WHERE callclass="Incident"
AND Status NOT IN (6,16,17,18)
GROUP BY Cust_id, probcode
HAVING (COUNT(cust_id) > 1
AND COUNT(probcode) > 1)
)
答:
0赞
Adrian Maxwell
8/17/2023
#1
你声明你“想带回匹配的票证”,所以要获得所有事件细节,你可能应该避免分组。因此,我认为这是一种适合使用的情况,它可以为拥有多个具有相同问题代码的未结工单的用户返回所有事件。例如:EXISTS
SELECT
o1.*
FROM opencall o1
WHERE o1.callclass = "Incident"
AND o1.status NOT IN (6, 16, 17, 18)
AND EXISTS (
SELECT 1
FROM opencall o2
WHERE o2.Cust_ID = o1.Cust_ID
AND o2.probcode = o1.probcode
AND o2.callref <> o1.callref -- must be more than 1 incident
AND o2.callclass = "Incident"
AND o2.status NOT IN (6, 16, 17, 18)
)
注意,此查询不会标识状态为 null 的行。
评论
HAVING COUNT(*) > 1
就足够了,您不需要指定列名称。GROUP_CONCAT(ticket_id)