SQL - Select 总数少了一条记录

SQL - Select One less record from total

以下是数据,我想输出每个值少一条记录。

例如有

A总计4个,所以输出应该有3个A

总B为1,所以输出不应该有任何B

C 共有 2 个,所以输出应该有一个 C

总D为1,所以输出不应该有任何D

总F为3,所以输出应该有2个F

+------+
| Data |
+------+
| A    |
| A    |
| A    |
| A    |
| B    |
| C    |
| C    |
| D    |
| E    |
| F    |
| F    |
| F    |
+------+

输出

+------+
| Data |
+------+
| A    |
| A    |
| A    |
| C    |
| F    |
| F    |
+------+

可以使用row_number();如果你有一个排序栏就更好了(我假设 id):

select data
from (select data, row_number() over(partition by data order by id) rn from mytable) t
where rn > 1

如果您没有排序列,那么您可以 order by data

使用row_number()

select t.data
from (select t.*, row_number() over (partition by data order by data) as seq
      from table t
     ) t
where seq > 1;

使用解析函数:

WITH cte AS (
    SELECT Data, COUNT(*) OVER (PARTITION BY Data) cnt,
        ROW_NUMBER() OVER (PARTITION BY Data ORDER BY (SELECT NULL)) rn
    FROM yourTable
)

SELECT Data
FROM cte
WHERE rn < cnt;

用简单的英语术语来说,上述方法保留其行号(基于某种任意排序)比每个 [=11= 中的记录总数 的任何记录] 团体。这意味着结果集中将排除每组一条记录。