[英]Select all rows with max value on a column for all the id in array
我有带有列的以下表格标记:
LOC(Blob)
LOCDTL
LOCTIME
CARRIERTYPE
CARRIERID
我想从查询本身的数组中获取每个ID对应于MAX(LOCTIME)值的行。
我已经尝试过这种可能性,但没有一种能达到我想要的效果。
SELECT X(LOC), Y(LOC), LOCDTL, LOCTIME, UPPER(CARRIERTYPE), CARRIERID
FROM LOC_EVENT_CARRIER_REPO
WHERE UPPER(TRIM(CARRIERTYPE)) = "VESSEL"
AND UPPER(TRIM(CARRIERID)) IN (35, 69,70,71,72,73,74)
AND LOCTIME IN (SELECT MAX(LOCTIME) FROM LOC_EVENT_CARRIER_REPO
WHERE UPPER(CARRIERTYPE) = "VESSEL"
AND CARRIERID IN (35, 69,70,71,72,73,74))
group by CARRIERID;
如果我做对了。 在提供的ID列表中找到最后一行,并为每个CARRIERID
加上MAX(LOCTIME)
SELECT X(LOC), Y(LOC), LOCDTL, LOCTIME, UPPER(CARRIERTYPE), CARRIERID
FROM LOC_EVENT_CARRIER_REPO e
JOIN (
SELECT CARRIERID, MAX(LOCTIME) maxlt
FROM LOC_EVENT_CARRIER_REPO
WHERE UPPER(CARRIERTYPE) = "VESSEL"
AND CARRIERID IN (35, 69,70,71,72,73,74)
GROUP BY CARRIERID
) m ON e.CARRIERID = m.CARRIERID AND e.LOCTIME = m.maxlt
如果我理解正确,则只需要一个相关子句,而不是子查询中的GROUP BY
:
SELECT X(LECR.LOC), Y(LECR.LOC), LECR.LOCDTL,
LECR.LOCTIME, UPPER(LECR.CARRIERTYPE), LECR.CARRIERID
FROM LOC_EVENT_CARRIER_REPO LECR
WHERE UPPER(TRIM(LECR.CARRIERTYPE)) = 'VESSEL' AND
LECR.CARRIERID IN (35, 69, 70, 71, 72, 73, 74) AND
LECR.LOCTIME IN (SELECT MAX(LECR2.LOCTIME)
FROM LOC_EVENT_CARRIER_REPO LECR2
WHERE UPPER(TRIM(LECR2.CARRIERTYPE)) = UPPER(TRIM(LECR.CARRIERTYPE)) AND
LECR2.CARRIERID = LECR.CARRIERID
);
您的版本与所有运营商中的最长时间匹配,而不仅仅是每个运营商。
笔记:
UPPER(TRIM())
。 UPPER(TRIM())
,而CARRIERID
看起来是数字。 GROUP BY
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.