按一张表中的所有列进行分组

Jom*_*thr 8 sql db2 join group-by

我有一个简单的查询:

select c.* , max(TLO.BILL_DATE)
from

client c
left outer join TLORDER TLO
on TLO.CUSTOMER = c.CLIENT_ID
OR TLO.ORIGIN = c.CLIENT_ID
OR TLO.DESTINATION = c.CLIENT_ID

GROUP BY c.*
Run Code Online (Sandbox Code Playgroud)

查询本身非常简单,但是客户端表包含 200 多个字段,我需要检索所有字段。

有没有办法做类似的事情

GROUP BY c.*
Run Code Online (Sandbox Code Playgroud)

或者我必须输入全部 200+ GROUP_BY 吗?

谢谢

Gor*_*off 5

不,您不必全部输入,因为您不需要使用group by. 相反,使用相关子查询:

select c.* ,
       (select max(TLO.BILL_DATE)
        from TLORDER TLO
        where TLO.CUSTOMER = c.CLIENT_ID or
              TLO.ORIGIN = c.CLIENT_ID or
              TLO.DESTINATION = c.CLIENT_ID
       )
from client c;
Run Code Online (Sandbox Code Playgroud)

如果您使用group by,那么您将必须列出所有列。请注意,在这种情况下,ANSI SQL 支持仅使用主键或唯一键。因此,这将符合 ANSI 标准:

select c.*, max(TLO.BILL_DATE)
from client c left join
     TLORDER TLO
     on TLO.CUSTOMER = c.CLIENT_ID or
        TLO.ORIGIN = c.CLIENT_ID or
        TLO.DESTINATION = c.CLIENT_ID
group by c.c_id;
Run Code Online (Sandbox Code Playgroud)

我不认为 DB2 支持这种构造,尽管其他一些数据库支持。