我有一张有数百万条记录的表格。
所以我可能会有这些专栏
a,b,c,d
我需要根据a和b列选择所有不同的记录。
但我需要选择a,b,c和d列,而不仅仅是a和b。
我可以这样做吗?
修改
数据可能
1,1,青蛙,绿色
1,1,青蛙,棕色
2,1,猫,黑色
2,4,狗,白
所以我需要;
1,1,青蛙,绿色
2,1,猫,黑
2,4,狗,白
答案 0 :(得分:3)
SQL Server支持公用表表达式和窗口函数。下面的查询使用ROW_NUMBER()
,根据组对记录进行排名。它按c ASC, d ASC
排序(只是玩它)。
WITH records
AS
(
SELECT a, b, c, d,
ROW_NUMBER() OVER(PARTITION BY a, b ORDER BY c, d) rn
FROM TableName
)
SELECT a, b, c, d
FROM records
WHERE rn = 1
答案 1 :(得分:0)
分区是你的男人
SELECT a, b, c, d FROM (
SELECT a, b, c, d, ROW_NUMBER() OVER (PARTITION BY a, b ORDER BY a, b) rn
FROM table
) sq
where rn = 1
答案 2 :(得分:0)
请尝试:
select *
From(
select
row_number() over (partition by a, b order by a, b) RNum,
*
from
YourTable
)x
where RNum=1
样品
select * From(
select row_number() over (partition by a, b order by a, b) RNum, *
from(
select 1 a, 1 b, 'frog' c, 'green' d union all
select 1 a, 1 b, 'frog' c, 'brown' d union all
select 2 a, 1 b, 'cat' c, 'black' d union all
select 2 a, 4 b, 'dog' c, 'white' d)x
)y
where RNum=1