我正在尝试为数据库中的每个单元选择最新的检查记录,不幸的是,它是 SQLBase 11.7。我想也许我可以做类似的事情
SELECT Col1, Col2, Col3
FROM Insp_Header
WHERE (unit_id, insp_dt) IN (SELECT unit_id, MAX(insp_dt)
FROM Insp_Header
GROUP BY unit_id);
但是当我尝试这个时,我收到了标题中的错误。我还尝试通过使用显式连接来解决这个问题,
SELECT Col1, Col2, Col3 FROM Insp_header
INNER JOIN (
SELECT unit_id, MAX(insp_dt)
FROM Insp_Header GROUP BY unit_id) meh
ON Insp_Header.unit_id=meh.unit_id
AND Insp_Header.insp_dt=meh.insp_dt;
当这不起作用时,就使用隐式的方法。
SELECT Col1, Col2, Col3
FROM Insp_Header
, ( SELECT unit_id, MAX(insp_dt)
FROM Insp_Header GROUP BY unit_id) meh
WHERE Insp_Header.unit_id=meh.unit_id
AND Insp_Header.insp_dt=meh.insp_dt;
两者都导致了标题中提到的相同错误。唯一的区别是,在我最初的尝试中,指示错误发生位置的箭头指向 WHERE 和 IN 关键字之间的表达式中的逗号,而现在箭头指向子查询的 SELECT 子句中第一列之后的逗号。我正在努力想出一种方法来完成这项工作,或者用另一种方法来实现相同的目标。任何建议将不胜感激,谢谢。
你可以使用 join 但这样 :
SELECT Col1, Col2, Col3
FROM Insp_Header as ih
JOIN (
SELECT unit_id, MAX(insp_dt) as max_insp_dt
FROM Insp_Header
GROUP BY unit_id
) as t1
on ih.unit_id = t1.unit_id
and ih.insp_dt = t1.max_insp_dt