SQL:从Select语句中筛选最近的日期条目

SQL:从Select语句中筛选最近的日期条目,sql,sql-server,Sql,Sql Server,我希望有人能帮我回答这个问题。MIN函数没有按预期工作,可能是因为我需要在那里的某个地方有一个联接,但我尝试过的联接都没有工作。我发现的任何示例(例如)都只是基本示例,不包括在某些列上具有匹配项的多行,或者从多个表中进行选择 SELECT TruckNo, MIN(ArrivalDate) AS ArrivalDate, DockId, FreightCode FROM tblTruckArrival WHERE ArrivalDate <> '' AND DockId IN (

我希望有人能帮我回答这个问题。MIN函数没有按预期工作,可能是因为我需要在那里的某个地方有一个联接,但我尝试过的联接都没有工作。我发现的任何示例(例如)都只是基本示例,不包括在某些列上具有匹配项的多行,或者从多个表中进行选择

SELECT TruckNo, MIN(ArrivalDate) AS ArrivalDate, DockId, FreightCode
FROM tblTruckArrival  
WHERE ArrivalDate <> '' AND DockId IN (660,517,86,9,253,685)  
GROUP BY TruckNo, DockId, FreightCode  
ORDER BY TruckNo  
应将此邮件退回:

TruckNo         ArrivalDate     DockId  FreightCode  
22              2018-07-13      253     03WS18  
23              2018-09-02       86     808ES  
23              2018-09-12      685     808ES  
24              2018-11-24       86     810ES  
25              2018-06-17       86     805ES  
25              2018-06-28      517     805ES  
26              2018-07-03        9     805ES  
27              2018-07-13       86     806ES  

若您在GROUPBY语句中添加了FreightCode,显然它将为每个FreightCode提供结果基础。如果我错了,请纠正我,您需要每个卡车的到达日期和最小到达日期对应的货运代码。为此,请尝试以下方法:

select a.*,b.freightcode  
from
(select truckno, dockid, min(arrivaldate) as arrivaldate
from tbltruckarrival
where arrivaldate <> '' and dockid in (660,517,86,9,253,685)
group by truckno, dockid) a
left join
tbltruckarrival b
on a.truckno = b.truckno and a.arrivaldate = b.arrivaldate and a.docket_id = b.docket_id
order by a.truckno

如果有任何澄清,请告诉我。

为什么离开?虽然它不能改变结果,但这里只需要连接。left/internal两者都可以使用,这并不重要。请帮助:@G.Arima查看执行计划。它可以在不同的版本上有所不同,但内部版本通常成本较低。
select a.*,b.freightcode  
from
(select truckno, dockid, min(arrivaldate) as arrivaldate
from tbltruckarrival
where arrivaldate <> '' and dockid in (660,517,86,9,253,685)
group by truckno, dockid) a
left join
tbltruckarrival b
on a.truckno = b.truckno and a.arrivaldate = b.arrivaldate and a.docket_id = b.docket_id
order by a.truckno