Как убрать дубликаты из запроса на выборку? - PullRequest
9 голосов
/ 15 февраля 2011

Прежде чем задать этот вопрос, я искал в Google, но не смог понять или, возможно, не смог найти решение, подходящее для моей ситуации.

Итак, у меня есть одна таблица с 10 столбцами, я хочу исключить дубликатыиз выберите результат.И в результате должны быть представлены все столбцы с уникальным идентификатором пользователя

+-----------------------------------+------+---------------------+------+
| name                              | yr   |   some Columns      |userID|
+-----------------------------------+------+---------------------+------+
| abc                               | 2000 |                     |   10 |
| jack                              | 2000 |                     |   11 |
| dadas                             | 2000 |                     |   12 |
| jack                              | 2004 | .............       |   11 |
| jack                              | 2000 | ...........         |   11 |
| nell                              | 2006 | .............       |   13 |
| ......                            | 2000 | .............       |   1  |
| .............                     | 2000 | .............       |   2  |
| again                             | 2000 | .............       |   3  |
| again                             | 2000 |                     |   3  |
| .......                           | 1973 | .............       |   2  |
| abc                               | 2000 |                     |   10 |

Ответы [ 4 ]

12 голосов
/ 15 февраля 2011

Если вам не нужно сохранять разные годы, просто используйте DISTINCT ON (FIELD_NAME)

SELECT DISTINCT ON (userID) userdID, name, yr FROM TABLE_NAME
3 голосов
/ 15 февраля 2011

Попробуйте это:

SELECT * FROM TABLE_NAME GROUP BY userID
2 голосов
/ 16 октября 2016

Легким будет:

SELECT DISTINCT (userID) userdID, name, yr FROM TABLE_NAME
2 голосов
/ 15 февраля 2011

Для PostgreSQL , а также SQL Server 2005+, DB2 и более поздних версий Oracle (9+) вы можете использовать оконную функцию ROW_NUMBER ()

select *
from
(
select *, ROW_NUMBER() over (partition by userID order by yr desc) rown
) X
where rown = 1
...