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)
如果你不在乎你得到的是什么,你可以使用这样的东西:
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 ....)内的顺序控制
| 归档时间: |
|
| 查看次数: |
8847 次 |
| 最近记录: |