2016-09-11 29 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; 

任何问题让我知道,会解决你。

相关问题