同时使用DISTINCT和TOP

时间:2013-03-18 14:27:26

标签: sql sql-server tsql

我想使用不同的&在同一时间,我做了

SELECT distinct TOP 10 * FROM TableA

但我仍然有一个重复的PersonId,所以我应该这样做:

SELECT distinct (personID) TOP 10 * FROM TableA  但语法错误,所以我想知道是否有任何解决方案

感谢,

10 个答案:

答案 0 :(得分:31)

您正在使用SELECT *来提取所有记录。如果要仅使用真正的DISTINCT列出要接收其不同值的列。如果您有多个列,则所有这些列组合在一起构成一个不同的记录。

SELECT distinct TOP 10 personID 
FROM TableA

请注意,如果没有ORDER BY,这将返回前10条记录,没有特定的顺序。每次运行查询时结果都可能不同。

答案 1 :(得分:1)

您似乎想要为不同的人提供10个随机记录。试试这个:

select t.*
from (select t.*,
             row_number() over (partition by personid order by (select NULL)) as seqnum
      from t
     ) t
where seqnum = 1

一般情况下,在使用top时,您还应该使用order by来指定“top”的含义。

答案 2 :(得分:1)

从tablea样本10中选择不同的personid

这适用于teradata

答案 3 :(得分:1)

如果您使用这样的查询,它的工作原理很简单:

SELECT DISTINCT TOP 2 name FROM [ATTENDANCE] ; 

在上面的查询中,name是column_name,[ATTENDANCE]是table_name。

您也可以使用WHERE来制作过滤条件。

答案 4 :(得分:1)

也许你可以这样做:

SELECT TOP 10 t.* FROM (SELECT distinct personID FROM TableA) t

答案 5 :(得分:0)

from datetime import datetime from dateutil.relativedelta import relativedelta datetime.now()+ relativedelta(days=5)

ta是子查询的对象,使用ta对象可以区分值

答案 6 :(得分:0)

几个选项:

1: 选择前 10 个人 ID FROM(从表A中选择不同的personID)

2: ;与 cte 为 (从表A中选择不同的personID) 从 cte 中选择前 10 个 personID

3: ;与 cte 为 (SELECT personID,row_count=row_number() over (partition by personID order by personID) 从表A ) SELECT top 10 personID FROM cte where row_count=1

答案 7 :(得分:0)

我认为这是一个老问题,但我可以提出一个更优雅的解决方案

SELECT personDetails.*
FROM
(
    SELECT      TOP (10)
                personID
                personID
    FROM        TableA
    GROUP BY    personID    --> use this instead of distinct
)   AS          distinctIds

OUTER APPLY
(
    SELECT  TOP (1) *       --> fetch only one result matching personID
    FROM    TableA
    WHERE   TableA.personId = distinctIds.personID
)   AS      personDetails

您可以使用 GROUP BY 而不是 DISTINCT,并且您可以使用 OUTER APPLY 和 TOP(1) 来仅获取一个匹配结果。

答案 8 :(得分:-2)

如果目标是选择每个personID的前1条记录,请使用

select * from TableA group by personid

由于您正在执行“分组依据”,它将返回每一列,但会忽略(不显示)具有相同personId的任何其他行

答案 9 :(得分:-3)

我修好了我

select distinct  personid from (SELECT  TOP 10 * FROM TableA)