0

我需要从三个不同的表中选择七列,仅当其中一列具有特定值时。TAGNAME当两列 (和TAGNUMMER) 都重复时,我还需要只选择最后一个日期。我正在使用以下代码:

select c.AKEY, c.AKT_DATUM, c.TAGNAME, c.TAGNUMMER, 
       cd.TEILANLAGEN_ID, x.TP_GSAP_KZ, c.KLASSEN_ID
from T0EM01 c, T0EM03 x, T0AD07 cd
where cd.TEILANLAGEN_ID = '219A'
inner join
(select c.TAGNAME and c.TAGNUMMER max(C.AKT_DATUM)
where T0EM01 c c.TAGNAME and T0EM01 c c.TAGNUMMER = m.max_date

直到where cd.TEIANLAGEN_ID = '219A'它工作正常(但有超过 200 万行)。

如何过滤,以便当两者TAGNAMETAGNUMMER在两行或多行中重复时,我只选择最新日期?

4

1 回答 1

0

如果您正确加入这 3 个表,“超过 200 万行”可能会更少。就像你说的那样,你正在产生笛卡尔连接并且得到了太多的行。

from t0em01  c,
     t0em03  x,
     t0ad07  cd

我不知道它们如何相互连接,所以我只是猜测;你应该知道。

从“最大日期值”开始,一种选择可能是使用子查询,也可以正确连接到其他表。再一次,我不知道如何加入他们。

改进它:

select c.akey,
       c.akt_datum,
       c.tagname,
       c.tagnummer,
       cd.teilanlagen_id,
       x.tp_gsap_kz,
       c.klassen_id
from t0em01 c join t0em03 x on x.id = c.id          --> I'm just 
              join t0ad07 cd on cd.id = c.id        --  guessing here
where cd.teilanlagen_id = '219A'
  and c.akt_datum = (select max(c1.akt_datum)       --> subquery, to return
                     from t0em01 c1                 --  only the MAX date value
                     where c1.tagname = c.tagname
                       and c1.tagnummer = c.tagnummer
                    );
于 2021-07-01T20:38:18.230 回答