我希望有人可以帮助解决这个问题。 MIN()函数没有按预期工作,可能是因为我需要在某处有一个JOIN,但我没有尝试过任何联接。我找到的任何示例如SQL: Select most recent date for each category都是基本的,并且不包含多行,这些行在某些列上具有匹配的条目,或者从多个表中进行选择。
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
这会返回类似这些结果的内容,其中包括每个DockId的多个ArrivalDates,当我想要的是每个DockId的下一个到达日期而不是将来的日期。如果我从Select语句中删除FreightCode,我会得到正确的结果(可能是因为某些条目对同一个DockId有不同的FreightCode)但我需要知道FreightCode对于返回的每一行是什么。
TruckNo ArrivalDate DockId FreightCode
22 2018-07-13 253 03WS18
22 2018-08-29 253 04WS18
22 2018-10-16 253 05WS18
22 2018-12-03 253 06WS27
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
25 2018-12-04 517 810ES
26 2018-07-03 9 805ES
27 2018-07-13 86 806ES
应该返回:
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
答案 0 :(得分:1)
如果您在group by语句中添加FreightCode,显然它会为每个FreightCode提供结果。如果我错了,请纠正我,你希望FreightCode对应于每个truckno和min到达日期。为此,试试这个:
SELECT bp.id, COALESCE(t.data_od_t, 'NIE') AS "313"
FROM bp_produkt bp
LEFT JOIN LATERAL (select to_char(data_od, 'YYYY-MM-DD') AS data_od_t
from bp_stan_produkt
where id_produkt = bp.id
and data_do is null
and id_stan_produkt = 313) t
ON TRUE
WHERE bp.id in(21048528)
如有任何澄清,请通知我。