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