我想使用不同的&在同一时间,我做了
SELECT distinct TOP 10 * FROM TableA
但我仍然有一个重复的PersonId,所以我应该这样做:
SELECT distinct (personID) TOP 10 * FROM TableA
但语法错误,所以我想知道是否有任何解决方案
感谢,
答案 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)