2015-06-22 43 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