У меня есть запрос к большому количеству больших таблиц (строк и столбцов) с несколькими объединениями, однако в одной из таблиц есть несколько повторяющихся строк данных, вызывающих проблемы для моего запроса. Поскольку это только чтение в реальном времени из другого отдела, я не могу исправить эти данные, однако я пытаюсь предотвратить проблемы в моем запросе.SQL Left Только первое совпадение
Учитывая, что мне нужно добавить данные дерьма в качестве левого соединения к моему хорошему запросу. Набор данных выглядит следующим образом:
IDNo FirstName LastName ...
-------------------------------------------
uqx bob smith
abc john willis
ABC john willis
aBc john willis
WTF jeff bridges
sss bill doe
ere sally abby
wtf jeff bridges
...
(около 2 десятков столбцов и 100K строк)
Мой первый инстинкт должен был выполнить отчетливый дал мне около 80K строк:
SELECT DISTINCT P.IDNo
FROM people P
Но когда Я стараюсь следующее, я получаю все строки обратно:
SELECT DISTINCT P.*
FROM people P
ИЛИ
SELECT
DISTINCT(P.IDNo) AS IDNoUnq
,P.FirstName
,P.LastName
...etc.
FROM people P
Я тогда подумал, что буду выполнять функцию агрегации FIRST() на всех столбцах, однако это тоже не так. Синтаксически я делаю что-то неправильно здесь?
Update: Просто хотел отметить: Эти записи являются дубликатами, основанные на неключевых/Неиндексированные поле ID, перечисленных выше. Идентификатор - это текстовое поле, которое хотя и имеет одно и то же значение, это другой случай, чем другие данные, вызывающие проблему.
Похоже, строки не являются истинными дубликатами. Некоторые столбцы должны быть разными, иначе '' distinct * '' не будет возвращать все строки. Можете ли вы уточнить, что делает строку дубликат? – acfrancis
Просьба представить желаемый результат для этой таблицы 'объявить @t таблицу (ID INT, имя символ (1)) вставка @t значения (1, 'а'), (1, 'б'), (1 , 'a'), (2, 'a'), (2, 'c') ' –
Вы можете использовать CTE с ROW_NUMBER() OVER (PARTITION BY FirstName, LastName ORDER BY ID/DATE DESC) Как orderID', а затем выберите, где этот столбец равен одному из CTE. @acfrancis прав; вам нужно определить первичный ключ вашего вывода и использовать его для вашего раздела по столбцам. –