sqlite) - 在同一个表上分组数据

时间:2015-04-09 14:17:54

标签: sql sqlite

我在名为UniqueCrash的表中有一些数据,它有一个哈希值,还有一个issue_id(它是一个外部错误跟踪器ID)。

我想要找到的是一个UniqueCrash行列表,其中相同的散列值 - 因为它是调用堆栈的散列 - 已被分配给多个错误跟踪器ID(因为这意味着重复的错误已被删除)记录)。

我的测试数据如下所示(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是错误的,我看不出原因。

有人能建议一种更好的方法来重写这个查询(以及一个实际可行的查询)吗?

1 个答案:

答案 0 :(得分:1)

只需使用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