2015-07-01 129 views
0

表定義查詢以基於某些條件

ColumnName Comments 
CustomerID INT 
SequenceNo INT 
Comments VARCHAR(MAX) 

客戶表

CustomerID SequenceNo Comments 
1 1 ABC D 
1 2 CDE 
1 3 ABC 
1 4 ABC D 
1 5 CDE 
1 6 abc 
2 7 ABC DEF 
2 8 
2 9 ABC DEF 
2 10 DEF 
2 11 XYZ 123 
2 12 ABC 
3 13 PQ RST 

OUTPUT

CustomerID SequenceNo Comments 
1 3 ABC 
1 4 ABC D 
1 5 CDE 
1 6 abc 
2 8 
2 9 ABC DEF 
2 10 DEF 
2 11 XYZ 123 
2 12 ABC 
3 13 PQ RST 

記錄應通過 1.顯示進行過濾只有獨特的評論顯示獨特的評論來自所有客戶的客戶表, 2.如果意見是相同的,然後顯示其具有最大SequenceNo

+0

您可以發佈您擁有的查詢 至今? –

+0

Google並瞭解ROW_NUMBER()OVER(PARTITION BY ...) –

回答

0

您可以使用窗口函數此行:

select c.* 
from (select c.*, 
      row_number() over (partition by CustomerId, Comments 
           order by SequenceNo desc) as seqnum 
     from comments c 
    ) c 
where seqnum = 1; 
+0

他只需要不同的CustomerID和Comments與最大sequenceNo的組合。我不認爲row_number()需要 – Stephan

+0

@Stephan。 。 。兩種方法都有效。 –

+0

但是,爲什麼要將一個簡單的組更改爲具有Windows函數的派生表?這只是不必要的複雜性。 – Stephan

1

這裏假設你使用的是區分大小寫的整理

SELECT CustomerID, 
     MAX(SequenceNo) AS SequenceNo, 
     Comments 
FROM yourTable 
GROUP BY CustomerID,Comments 
ORDER BY CustomerID,MAX(SequenceNo) 

如果您未使用區分大小寫的排序規則,請嘗試以下操作:

SELECT CustomerID, 
     MAX(SequenceNo) AS SequenceNo, 
     Comments COLLATE SQL_Latin1_General_CP1_CS_AS 
FROM yourTable 
GROUP BY CustomerID,Comments COLLATE SQL_Latin1_General_CP1_CS_AS 
ORDER BY CustomerID,MAX(SequenceNo)