我有一个表tb_FirstName
,其中包含一个字段FirstName
。该表有1亿个非空记录,有很多重复,例如约翰发生了200万次。 FirstName
的独特数量超过200万。
如何使用标准 sql尽快选择1000个不同的名称?
我目前正在使用以下内容,但这是
可能效率不高。
SELECT x.FirstName
FROM (
SELECT FirstName,
rnk = RANK() OVER (ORDER BY Firstname)
FROM WHData.dbo.tb_DimUserAccount A
GROUP BY FirstName
) x
WHERE rnk <=1000
答案 0 :(得分:8)
似乎您可以将TOP 1000
与DISTINCT
一起使用:
SELECT DISINCT TOP 1000 FirstName
FROM WHData.dbo.tb_DimUserAccount
ORDER BY FirstName
答案 1 :(得分:3)
试试这个
SELECT TOP 1000 FirstName FROM
(SELECT
ROW_NUMBER() OVER(PARTITION BY FirstName ORDER BY FirstName) NO,
FirstName FROM WHData.dbo.tb_DimUserAccount )
AS T1 WHERE no =1
或
SELECT DISINCT TOP 1000 FirstName
FROM WHData.dbo.tb_DimUserAccount ORDER BY FirstName
答案 2 :(得分:2)
确保在FirstName上定义了索引。
SELECT TOP 1000 FirstName
FROM (SELECT DISTINCT FirstName
FROM dbo.tb_DimUserAccount) N
ORDER BY FirstName
答案 3 :(得分:2)
在FirstName字段上对结果进行排序后,您需要数据。
如果未创建索引,则需要全表扫描。如果在FirstName上创建索引,则唯一索引扫描可以缩短时间。
答案 4 :(得分:1)
GROUP BY子句的选项
SELECT TOP 1000 FirstName
FROM WHData.dbo.tb_DimUserAccount
GROUP BY FirstName
ORDER BY FirstName