SQL 删除某些重复值

SQL remove certain duplicate values

我有这样的结果 table(在查询 运行 之后):

     id     |  time  | region
12x-4nm-334 | 16:00  | Utah
12x-4nm-334 | 17:00  | California
12x-4nm-334 | 19:00  | Missouri
12x-4nm-334 | 22:00  | California
983-n2n-aq2 |  8:00  | New York
983-n2n-aq2 |  9:00  | New York

这个table中还有一些其他的列,但重要的是我想从结果中删除只注册到一个区域的id。因此,像“983-n2n-aq2”这样只出现在单个区域(无论时间如何)的 ID 不应该出现在结果 table.

希望这个问题够清楚了。

试试这个:

SELECT id, count(DISTINCT region) as RegionCount
FROM table
GROUP BY
    id
HAVING count(DISTINCT region) > 1

如果您的 DBMS 不支持 count(distinct ) 那么应该这样做:

SELECT id, count(DISTINCT region) as RegionCount
FROM (
    SELECT id, region FROM table GROUP BY id, region
) as table
GROUP BY
    id
HAVING count(DISTINCT region) > 1

如果你使用MySql

    DELETE FROM table 
    WHERE id IN (   SELECT x.id
                    FROM (  select *
                            FROM table t
                            GROUP BY id
                            HAVING COUNT(DISTINCT region) = 1
                           ) as x
                    )

我不知道 Vertica。希望对你有帮助

试试这个(从 Geerkens 先生那里借来的):

SELECT a.*
FROM table a INNER JOIN
(
    SELECT id
    FROM table
    GROUP BY id
    HAVING count(DISTINCT region) > 1
) b ON a.id = b.id

首先获取具有多个不同区域的id(如子查询中所示),然后在WHERE子句中使用它进行过滤。

SELECT id, time, region
FROM mytable
WHERE id IN
(
    SELECT id
    FROM mytable
    GROUP BY id
    HAVING count(DISTINCT region) > 1
)