需要一个 SQL 语句来过滤行
Need a SQL statement to filter rows
有一个 table 看起来像这样:
我只需要检索突出显示的记录。我需要一个查询,它应该在更大的 table 上工作,其中存在数百万条记录。
条件:
有 4 组,第 1 组和第 3 组具有相似的值,但第 2 组和第 4 组具有不同的值
编辑:
我在 table(添加了 ID 列)中做了细微修改。我们如何使用 ID 列实现相同的效果?
return only this kind of set where 1 or more different value exists in the set
create table #ab
(
col1a int,
colb char(2)
)
insert into #ab
values
(1,'a'),
(1,'a'),
(1,'a'),
(2,'b'),
(2,'c'),
(2,'c')
select id,col1a,colb
from #ab
where col1a in (
Select col1a from #ab group by col1a having count (distinct colb)>1)
关于数百万行的性能,我可能会检查执行计划并处理 it.with 我的样本数据集和我的查询,不同排序占成本的近 40%.. 数百万行,它可能也可以转到 tempdb..所以我建议使用下面的索引可以消除更多行
create index nci on #ab(colb)
include(col1a)
您也可以使用 INNER JOIN
而不是 IN
来实现它,因为它是百万行查询。
SELECT f.colA,f.colB
FROM
filtertable f
INNER JOIN
(
SELECT colA
FROM filtertable
GROUP BY colA
HAVING COUNT(DISTINCT colB)>1
) f1
ON f.colA = f1.colA
有一个 table 看起来像这样:
我只需要检索突出显示的记录。我需要一个查询,它应该在更大的 table 上工作,其中存在数百万条记录。
条件:
有 4 组,第 1 组和第 3 组具有相似的值,但第 2 组和第 4 组具有不同的值
编辑:
我在 table(添加了 ID 列)中做了细微修改。我们如何使用 ID 列实现相同的效果?
return only this kind of set where 1 or more different value exists in the set
create table #ab
(
col1a int,
colb char(2)
)
insert into #ab
values
(1,'a'),
(1,'a'),
(1,'a'),
(2,'b'),
(2,'c'),
(2,'c')
select id,col1a,colb
from #ab
where col1a in (
Select col1a from #ab group by col1a having count (distinct colb)>1)
关于数百万行的性能,我可能会检查执行计划并处理 it.with 我的样本数据集和我的查询,不同排序占成本的近 40%.. 数百万行,它可能也可以转到 tempdb..所以我建议使用下面的索引可以消除更多行
create index nci on #ab(colb)
include(col1a)
您也可以使用 INNER JOIN
而不是 IN
来实现它,因为它是百万行查询。
SELECT f.colA,f.colB
FROM
filtertable f
INNER JOIN
(
SELECT colA
FROM filtertable
GROUP BY colA
HAVING COUNT(DISTINCT colB)>1
) f1
ON f.colA = f1.colA