我需要从三个不同的表中选择七列,只有当其中一列具有特定值时。当两列(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万行(。
如何进行筛选,以便当TAGNAME
和TAGNUMMER
在两行或多行中重复时,我只选择最新日期?
"超过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
);