我在一个名为UniqueCrash的表中有一些数据,它有一个哈希值,还有一个issue_id (它是一个外部bug跟踪器ID)。
我想要找到的是一个UniqueCrash行的列表,其中相同的哈希值(因为它是调用堆栈的散列)分配给了多个bug跟踪器ID (因为它意味着一个重复的bug已经被记录)。
我的测试数据看起来如下(ID、散列、发出ID):
1 | 12345 | Bug 1
2 | 12345 | Bug 2
3 | 12345 | Bug 3
4 | 123456 | Bug 4我希望我的结果是这样的:
1 | 12345 | Bug 1
2 | 12345 | Bug 2
3 | 12345 | Bug 3(即只删除最后一个条目-该散列只使用一次)
我真的不知道这种技术叫什么,如果真的有名字的话。到目前为止,我有一个查询似乎提供了几乎正确的数据:
SELECT UniqueCrash.id, hash, issue_id
FROM UniqueCrash
WHERE hash IN
( SELECT hash FROM
( SELECT UniqueCrash.id, hash, issue_id
FROM UniqueCrash WHERE
UniqueCrash.issue_id IS NOT NULL
GROUP BY hash, issue_id )
GROUP BY hash HAVING COUNT(issue_id) > 1 )
ORDER BY hash ASC, id ASC但是,虽然它给出了正确的3行(按ID)返回,但看起来第1行和第2行的问题ID是错误的,我不明白为什么。
有人能建议一种更好的方法来重写这个查询(以及一个真正有效的查询)吗?
发布于 2015-04-09 16:48:30
只需使用COUNT DISTINCT即可:
SELECT `id`, `hash`, `issue_id`
FROM UniqueCrash
WHERE `hash` IN (
SELECT `hash` from UniqueCrash
GROUP BY `hash`
HAVING COUNT(DISTINCT `issue_id`) > 1)
ORDER BY `hash` ASC, `id` ASC请参阅DEMO HERE
https://stackoverflow.com/questions/29541086
复制相似问题