SQL查询 - 选择至少包含两个重复值的行

时间:2013-03-19 09:11:37

标签: sql select group-by

这是我的示例表:

|"id","singlesaleid","quantity"
-------------------------------------
| 1,   "00278e0f",    37
| 2,   "00278e0f",    38
| 3,   "002ebd2e",    37
| 4,   "00380783",    37
| 5,   "003b3c35",    37
| 6,   "003b3c35",    38
| 7,   "0042170b",    38
| 8,   "00421b89",    37
| 9,   "00421b89",    38
| 10,  "00587f02",    37
| 11,  "00799433",    38
| 12,  "00799433",    37

如何选择选择并仅对在singlesaleid列中具有至少两个重复值的行进行分组?

结果应该是:

|"id","singlesaleid","quantity"
-------------------------------------
| 1,   "00278e0f",      37
| 6,   "003b3c35",      38
| 9,   "00421b89",      38
| 12,  "00799433",      37

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

SELECT  a.*
FROM    TableName a
        INNER JOIN
        (
            SELECT  singlesaleid, MIN(quantity) min_val
            FROM    TableName
            GROUP   BY singlesaleid
            HAVING  COUNT(*) > 1
        ) b a.singlesaleid = b.singlesaleid AND
            a.quantity = b.Min_Val

答案 1 :(得分:0)

如果您想要只有那些具有至少2个重复项的singlesaleid's的任何记录(只有一个),请尝试以下代码..

select * from table where rowid in 
(select min(rowid) from table
group by singlesaleid
having count(*)>=2)

答案 2 :(得分:0)

您也可以使用EXISTS()运算符选项。虽然,我不太明白,应该从组中选择哪一行,在请求中选择一行MAX(t2.Id)

SELECT *
FROM Tablename t1
WHERE EXISTS (
              SELECT *
              FROM Tablename t2
              WHERE t1.singlesaleid = t2.singlesaleid
              HAVING COUNT(*) > 1 AND MAX(t2.Id) = t1.id
              )

SQLFiddle上的演示