SQL查询以查找订单最后一个事件的状态
我有两个表(在SQL Server数据库中),如下所示: t领主SQL查询以查找订单最后一个事件的状态,sql,sql-server-2008,Sql,Sql Server 2008,我有两个表(在SQL Server数据库中),如下所示: t领主 医嘱ID(主键) (更多字段) t等级 事件ID(主键) OrderID(FK)(链接到TblOrders的OrderID) 事件日期 地位 TblEvents中的每个事件都属于TblOrders中的一个订单,每个事件都有一个日期和一个“状态”(数字代码)。一个订单可能有多个事件(至少一个) 我需要一个SQL查询,为TblOrders中的每个OrderID查找所有事件中最新事件的状态。例如: 输入表: TblOrders ==
医嘱ID(主键)
(更多字段) t等级
事件ID(主键)
OrderID(FK)(链接到TblOrders的OrderID)
事件日期
地位 TblEvents中的每个事件都属于TblOrders中的一个订单,每个事件都有一个日期和一个“状态”(数字代码)。一个订单可能有多个事件(至少一个) 我需要一个SQL查询,为TblOrders中的每个OrderID查找所有事件中最新事件的状态。例如: 输入表: TblOrders ========= OrderID 1 2 3 TblEvents ========= EventID OrderID EventDate Status 1 1 01/02/2011 4 2 1 02/02/2011 2 3 2 03/02/2011 2 4 3 03/02/2011 3 5 2 01/02/2011 1 领主 ========= 订单编号 1. 2. 3. T级 ========= EventID OrderID EventDate状态 1 1 01/02/2011 4 2 1 02/02/2011 2 3 2 03/02/2011 2 4 3 03/02/2011 3 5 2 01/02/2011 1 查询结果: OrderID Status 1 2 2 2 3 3 医嘱ID状态 1 2 2 2 3 3 (OrderID 2的状态为2,因为它有两个事件3和5,最近一个事件是状态为2的事件3。)
我希望我已经解释清楚了。我已尝试编写查询很长时间,但找不到解决方案,因此欢迎提供任何帮助或提示。选择TblORDER.ORDERID,MAX(tblEvent.EventDate),tblEvent.Status FROM TblORDER internal JOIN tblEvent.ORDERID=tbOrder.ORDERID组BY TblORDER.ORDERID。。。类似的东西?试试这个
SELECT DISTINCT(OrderId) OrderId, Status
FROM tblEvents
ORDER BY EventDate
注意:如果一个订单的多条记录具有相同的最新EventDate,则这将返回多行
SELECT q.OrderID, q.Status
FROM (SELECT e.OrderID, e.Status,
ROW_NUMBER() OVER (PARTITION BY e.OrderID ORDER BY EventDate DESC) as RowNum)
FROM tblEvents e) q
WHERE q.RowNum = 1
使用以下命令执行相同的查询:
- 现在把这个和你想要的任何表连接起来
SELECT q.OrderID, q.Status
FROM (SELECT e.OrderID, e.Status,
ROW_NUMBER() OVER (PARTITION BY e.OrderID ORDER BY EventDate DESC) as RowNum)
FROM tblEvents e) q
WHERE q.RowNum = 1
;WITH cteRowNum AS (
SELECT e.OrderID, e.Status,
ROW_NUMBER() OVER (PARTITION BY e.OrderID ORDER BY EventDate DESC) as RowNum
FROM tblEvents e
)
SELECT q.OrderID, q.Status
FROM cteRowNum q
WHERE q.RowNum = 1
select a.OrderID, e.Status
from (
select o.OrderID, max(e.EventDate) latestDate
from TblOrders o
inner join TblEvents e on o.OrderID = e.OrderID
group by o.OrderID
) a
inner join TblEvents e on e.OrderID = a.OrderID
where e.EventDate = a.latestDate
Select * from TblEvents Where EventID IN(
Select MAX(EventID) from TblEvents Group by OrderID
)