2016-09-11 33 views
0

什麼是最佳SELECT語句以獲得最大事件日期以實現下面提到的所需表?如何按最大日期進行分組,並使用非唯一字段

場景:一個訂單在其生命週期中可以有多個事件。如訂單已取消事件,放置擱置事件..等等。每個事件在備註表中記錄一個備註。

以下是活動&筆記表..我只想要最後記錄的事件和它的筆記。

表1:事件表

enter image description here

表2:表NOTES

enter image description here

所需的表

enter image description here

UPDATE:在願望表,我只想要得到的最大事件日期,併爲每個訂單的ID最大的事件,其中事件原因是「待定」的說明。因此將訂單將在所需的表的唯一標識符

+0

目前尚不清楚您是如何達到您的理想輸出。 –

+0

我想查看事件原因處於保留狀態的所有訂單ID以及最新事件。 – Lokapedia

+0

這些信息應該是你問題的一部分,而不是附註。 –

回答

1
;WITH cte As (
Select Notes.OrderId, Tmp.MaxDate, Notes.Note, ROW_NUMBER() OVER(PARTITION BY Notes.OrderId Order By Notes.Note) As rowNum 
From 
(Select EventId ,MAX(EventDate) As MaxDate 
From EventTable 
Where EventReason = 'OnHold' 
Group By EventId) Tmp 
Inner Join Notes On Tmp.EventId = Notes.EventId 
) 

Select OrderId, MaxDate, Note 
From cte 
Where RowNum = 1 
+0

感謝mhasan,但仍在獲取repid orderID。 – Lokapedia

+0

現在檢查..我用cte爲每個訂單ID生成rownumbers並選擇一行 –

0

使用分區中

SELECT 
    X.OrderId, 
    X.EventDate, 
    X.Note, 
FROM 
(
    SELECT 
     N.OrderId, 
     E.EventDate, 
     N.Note, 
     ROW_NUMBER() OVER(Partition By N.OrderId Order By N.OrderId,N.NoteDate DESC) AS PartNo 
    FROM NOTES N 
    LEFT JOIN dbo.[EVENT] E ON E.EventId=N.EventId 
    WHERE N.EventId IS NOT NULL 
    AND N.Note like '%on hold%' 
)X 
WHERE X.PartNo=1 
+0

謝謝Sandip,我忘了提到我只想要那些訂單,其中事件原因處於擱置狀態 – Lokapedia

+0

我試過你的查詢,但它仍然是orderID重複。 – Lokapedia

+0

它不應該重複,因爲我有它的分區,你可以寫任何地方條件根據您的要求,但你必須使用分區來解決您的查詢 –

0


您可以使用下面的查詢,希望這將是對你有用。

SELECT NT.ODER_ID, MAX(EV.EVENT_DATE), NT.NOTE 
     FROM EVENT EV, NOTES NT WHERE 
     EV.EVENT_ID = NT.EVENT_ID 
GROUP BY NT.ODER_ID, NT.NOTE 
ORDER BY NT.ODER_ID; 

任何問題讓我知道,會解決你。

相關問題