Одновременное использование DISTINCT и TOP

Я хочу использовать разные и верхние в одно и то же время, я сделал

SELECT distinct TOP 10 * FROM TableA

но у меня все еще есть дубликат PersonId, поэтому я должен:

SELECT distinct (personID) TOP 10 * FROM TableA  но синтаксис неверен, поэтому я задаюсь вопросом, есть ли какое-либо решение

спасибо,

Ответ 1

Вы используете SELECT *, который извлекает все записи. Если вы хотите использовать только истинный DISTINCT, введите столбец, в который хотите получить различные значения. Если у вас несколько столбцов, то все эти столбцы объединяются в одну отдельную запись.

SELECT distinct TOP 10 personID 
FROM TableA

Обратите внимание, что без ORDER BY это вернет первые 10 записей в определенном порядке. Результаты могут быть разными при каждом запуске запроса.

Ответ 2

Кажется, вам нужны 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".

Ответ 3

выберите отдельное лицо из таблицы образца 10

Это работает в teradata​​p >

Ответ 4

Он работает просто, если вы используете такой запрос:

SELECT DISTINCT TOP 2 name FROM [ATTENDANCE] ; 

В вышеприведенном запросе name - это имя_столбца, а [ATTENDANCE] - имя_таблицы.

Вы также можете использовать WHERE для этого, чтобы сделать условия фильтрации.

Ответ 5

SELECT DISTINCT ta.personid FROM (SELECT TOP 10 * FROM TableA) ta

ta является объектом подзапроса, и с помощью объекта ta мы можем различать значения

Ответ 6

я исправил его, я сделал

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

Ответ 7

Если цель состоит в том, чтобы выбрать первую 1 запись каждого идентификатора человека, используйте

select * from TableA group by personid

Поскольку вы выполняете "группу за", он будет возвращать каждый столбец, но будет игнорировать (не отображать) любые дополнительные строки с одним и тем же personId