This sql is returning too many rows because each OrderID has multiple OrderItemID's.
With each OrderItemID, there is a different datetime.
SELECT o.OrderID, oi.OrderItemID, MAX( r.SubmittedComplete ) AS SubmittedComplete
FROM tblOrder o
LEFT JOIN tblOrderItem oi ON oi.OrderID = o.OrderID
LEFT JOIN tblRun r ON r.OrderItemID = oi.OrderItemID
GROUP BY o.OrderID, oi.OrderItemID, r.SubmittedComplete
ORDER BY o.OrderID DESC
SELECT o.OrderID ,
oi.OrderItemID ,
r.SubmittedComplete
FROM tblOrder o
OUTER APPLY
(
SELECT TOP (1) OrderItemID
FROM tblOrderItem oi
WHERE oi.OrderID = o.OrderID
) oi
OUTER APPLY
(
SELECT TOP (1) SubmittedComplete
FROM tblRun r
WHERE r.OrderItemID = oi.OrderItemID
ORDER BY SubmittedComplete DESC
) r
ORDER BY o.OrderID DESC;
[quote="Zath, post:1, topic:1585"]
SELECT o.OrderID, oi.OrderItemID, MAX( r.SubmittedComplete ) AS SubmittedComplete
FROM tblOrder o
LEFT JOIN tblOrderItem oi ON oi.OrderID = o.OrderID
LEFT JOIN tblRun r ON r.OrderItemID = oi.OrderItemID
GROUP BY o.OrderID, oi.OrderItemID, r.SubmittedComplete
ORDER BY o.OrderID DESC
[/quote]Remove the highlighted text.
If you have several rows in tblOrderItem for a given OrderID, and each of those could have several rows in tblRun, and if you are trying to get the maximum date out of all of those, what I posted may not be logically correct. If that is the case, you may need something like shown below
SELECT o.OrderID ,
x.OrderItemID ,
x.SubmittedComplete
FROM tblOrder o
OUTER APPLY
(
SELECT TOP (1)
oi.OrderItemID,
r.SubmittedComplete
FROM
tblOrderItem oi
INNER JOIN tblRun r ON
r.OrderItemID = oi.OrderItemID
ORDER BY
SubmittedComplete DESC
) x
ORDER BY o.OrderID DESC;