2015-06-22 2 views
2

я следующая таблица БД называется messages с колоннами:Получить уникальную строку на один столбец, где существуют дубликаты

thread_id, sender_id, receiver_id, date 

Пример:

+-----------+------------+-------------+-------------+ 
| thread_id | sender_id | receiver_id | date  | 
+----------------------+-----------+-----------------+ 
| 1  | 1   | 2   | 11/06/2015 | 
| 1  | 2   | 1   | 14/06/2015 | 
| 1  | 1   | 2   | 14/06/2015 | 
| 1  | 2   | 1   | 20/06/2015 | 
| 2  | 1   | 3   | 12/06/2015 | 
| 3  | 4   | 2   | 19/06/2015 | 
| 3  | 2   | 2   | 20/06/2015 | 
+-----------+------------+-------------+-------------+ 

мне нужен запрос, который будет выбрать уникальный thread_id на ранних дата и где thread_id существует более одного раза.

Таким образом, мой желаемый результат будет:

+-----------+--------------+ 
| thread_id | date  | 
+-----------|--------------+ 
| 1  | 11/06/2015 | 
| 3  | 19/06/2015 | 
+-----------+--------------+ 

ответ

6
SELECT 
    MIN(date),thread_id 
FROM 
    messages 
GROUP BY 
    thread_id 
HAVING 
    COUNT(thread_id) > 1 
+0

вы пропускаете 'группу by' не говоря уже это не то, что хочет О.П. – ughai

+2

Это близко и намного проще, чем мое решение. –

3

Вы можете использовать ROW_NUMBER() и COUNT()

;WITH Cte AS(
    SELECT *, 
     rn = ROW_NUMBER() OVER(PARTITION BY thread_id ORDER BY [date]), 
     cc = COUNT(*) OVER(PARTITION BY thread_id) 
    FROM messages 
) 
SELECT 
    thead_id, [date] 
FROM Cte 
WHERE 
    rn = 1 
    AND cc > 1 
Смежные вопросы