如何使用非唯一字段按最大日期分组
How to group by max date with un-unique field
什么是最好的 SELECT 语句来获得最大事件日期以实现下面提到的期望 Table?
场景:一个订单在其生命周期中可以有多个事件..比如订单取消事件,订单搁置事件..等..每个事件在注释中记录一个注释table.
下面是事件和注释Table..我只想要最后记录的事件和注释。
Table 1:事件 Table
Table 2:注释 Table
想要Table
更新: 在愿望中 table 我只想获取最大事件日期,以及事件原因为每个订单 ID 的最大事件注释'On Hold'。因此 OrderID 将是所需 table
中的唯一标识符
使用分区依据:
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
;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
您可以使用以下查询:
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;
什么是最好的 SELECT 语句来获得最大事件日期以实现下面提到的期望 Table?
场景:一个订单在其生命周期中可以有多个事件..比如订单取消事件,订单搁置事件..等..每个事件在注释中记录一个注释table.
下面是事件和注释Table..我只想要最后记录的事件和注释。
Table 1:事件 Table
Table 2:注释 Table
想要Table
更新: 在愿望中 table 我只想获取最大事件日期,以及事件原因为每个订单 ID 的最大事件注释'On Hold'。因此 OrderID 将是所需 table
中的唯一标识符使用分区依据:
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
;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
您可以使用以下查询:
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;