2015-06-22 42 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'何况这是OP希望不是 – 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