每个 ID 限制为一行

Dar*_*age 2 postgresql join aggregate

这个查询给了我多个点击,因为每个assetid可能包含很多vb.title. 如何将结果限制为每个仅 1 次命中assetid

'select DISTINCT v.id,
           v.purchasedate,
           v.customerid,
           v.assetid,
           va.description,
           vb.title
  from purchases v,
           asset va,
           assetdescription vb
 where customerid = '$kid'
   and v.assetid = va.id
   and vb.assetid = va.id
 order by v.purchasedate'
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 5

如果你不在乎你得到的是什么,你可以使用这样的东西:

select max(v.id),
       max(v.purchasedate),
       max(v.customerid),
       v.assetid,
       max(va.description),
       max(vb.title)
  from purchases v,
           asset va,
           assetdescription vb
 where customerid = '$kid'
   and v.assetid = va.id
   and vb.assetid = va.id
 group by v.assetid
 order by v.purchasedate;
Run Code Online (Sandbox Code Playgroud)

如果你想要例如“最新的”,那么你可以使用这样的东西:

select t.id,
       t.purchasedate,
       t.customerid,
       t.assetid,
       t.description,
       t.title
from (
    select v.id,
           v.purchasedate,
           v.customerid,
           v.assetid,
           va.description,
           vb.title,
           row_number() over (partition by v.assetid order by v.purchasedate desc) as rn
      from purchases v,
               asset va,
               assetdescription vb
     where customerid = '$kid'
       and v.assetid = va.id
       and vb.assetid = va.id
) t
where rn = 1
order by v.purchasedate
Run Code Online (Sandbox Code Playgroud)

选择哪一个由窗口定义 ( partion by v.assetid order by ....)内的顺序控制