我有两个表(在SQL Server数据库中),如下所示:
TblOrders
OrderID(PK)
(更多领域)TblEvents
EventID(PK)
OrderID(FK)(链接到TblOrders的OrderID)
EVENTDATE
状态
TblEvents中的每个事件都属于TblOrders中的订单,每个事件都有一个日期和一个'status'(一个数字代码)。订单可能包含多个事件(至少一个)。
我需要一个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
查询结果:
OrderID Status 1 2 2 2 3 3
(OrderID 2有状态2,因为它有两个事件,3和5,最新的事件是状态2的事件3。)
我希望我已经清楚地解释了自己。我已经尝试长时间编写查询,但找不到解决方案,所以欢迎任何帮助或提示。
答案 0 :(得分:3)
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
答案 1 :(得分:0)
SELECT TblORDER.ORDERID,MAX(tblEvent.EventDate),tblEvent.Status FROM TblOrder INNER JOIN tblEvent ON tblEvent.OrderID = tbOrder.ORDERID GROUP BY TblORDER.ORDERID ......类似的东西?
答案 2 :(得分:0)
试试这个...
SELECT DISTINCT(OrderId) OrderId, Status
FROM tblEvents
ORDER BY EventDate
答案 3 :(得分:0)
select a.OrderID, a.Status
from TblEvents a
where a.EventDate =
(select max(b.EventDate)
from TblEvents b
where b.OrderId = a.OrderID)
请注意,如果订单的多个记录具有相同的最新EventDate,则会返回多行。
答案 4 :(得分:0)
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
使用CTE的相同查询:
;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
答案 5 :(得分:0)
Select * from TblEvents Where EventID IN(
Select MAX(EventID) from TblEvents Group by OrderID
)