2017-02-17 75 views
0

我有一個問題在SQL,SQL寫在兩個結果集,像集團通過LastActivityDate和不同notetext

Select 
    CustID, B, C, D, Max(LastActivityDate) as LastDateModified, NoteAdded 
from (
     Select 
     CustID,B,C,D, Max(LastActivityDate) as LastDateModified, NoteAdded 
     from tblA group by CustID,B,C,D, NoteAdded 
     UNION 
     Select 
     CustId,B,C,D, Max(LastActivityDate) as LastDateModified, NoteAdded 
     from tblB group by CustID,B,C,D, NoteAdded 
) as tblC 
group by CustID,B,C,D, LastDateModified, NoteAdded 

我得到兩行,NoteAdded是不同的,但我需要一個記錄取決於LastActivityDate。但是,由於獲得兩條記錄進行分組時,NoteAdded是不同的。

以下是帶有請求的示例記錄的圖像。

enter image description here

任何想法?

+0

如果從外部查詢的SELECT列表和Group By列表中刪除NoteAdded,該怎麼辦? (或者直接從內部查詢中刪除'NoteAdded') – DVT

+1

向我們展示示例數據和預期輸出。 \t請閱讀[**如何提問**](http://stackoverflow.com/help/how-to-ask) \t \t這裏是一個偉大的地方[** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)來了解如何提高您的問題質量並獲得更好的答案。 –

+0

@DVT我們需要在網格中添加註釋。因此需要用評論或筆記顯示最後的活動記錄 – Ammad

回答

1

您可以使用common table expressionrow_number()並獲得每個分區的頂部1,由LastDateModified desc下令這樣做。

;with cte as (
    select * 
    , rn = row_number() over (
     partiton by CustID, B, C, D 
      order by LastDateModified desc 
    ) 
    from (
    select CustID, B, C, D, LastDateModified, NoteAdded 
    from tblA 
    union all 
    select CustID, B, C, D, LastDateModified, NoteAdded 
    from tblB 
    ) as u 
) 
select CustID, B, C, D, LastDateModified, NoteAdded 
from cte 
where rn = 1 
+0

感謝您的快速解決方案。有一件事你是SQL顯示錯誤 它的一個小不知道爲什麼,但是當這個改變了它的工作原理 (大寫字母沒有空格) ROW_NUMBER()OVER(PARTITION BY – Ammad

+0

@qazifarhan啊,你說得對,我在那裏有一個錯字,'paritition'應該是'分區',沒有額外的i – SqlZim