我有一张有数百万条记录的表。
所以我可能有这些专栏
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,狗,白
我有一张有数百万条记录的表。
所以我可能有这些专栏
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,狗,白
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
分区是你的男人
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
请试试:
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