SQLBase 错误:00905 PRS MRP 缺少右括号

问题描述 投票:0回答:1

我正在尝试为数据库中的每个单元选择最新的检查记录,不幸的是,它是 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 子句中第一列之后的逗号。我正在努力想出一种方法来完成这项工作,或者用另一种方法来实现相同的目标。任何建议将不胜感激,谢谢。

sql rdbms sqlbase
1个回答
0
投票

你可以使用 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
© www.soinside.com 2019 - 2024. All rights reserved.