如何使用非唯一字段按最大日期分组

时间:2016-09-11 05:55:41

标签: sql sql-server maxdate

获得最大事件日期以实现下面提到的所需表的最佳SELECT语句是什么?

场景:订单在其生命周期中可以有多个事件..例如订单取消事件,保留事件的订单等等......每个事件都在备注表中记录一个注释。

以下是活动&注释表..我只想要最后记录的事件及其注释。

表1:活动表

enter image description here

表2:注意表

enter image description here

所需表格

enter image description here

更新:在欲望表中,我只想获取最大事件日期,以及每个订单ID的最大事件的注释,其中“事件原因”为“保持”状态。 。所以OrderID将是所需表中的唯一标识符

3 个答案:

答案 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

答案 1 :(得分: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

答案 2 :(得分: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;

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