有2个表,我想只为之前订购的每个客户选择最后一个订单...
(cid,cname)客户表
1,大卫2,汤姆
3,Alex
(oid,cid,title或ordertime)订单表
1,1, “T恤”,2013年10月1日
2,3, “球”,2013年10月1日
3,3, “食品”,2013年11月20日
*根据汤姆从未订购过的表格。所以他不会被列入名单。亚历克斯之前订购过2次,我只想显示最后一个订单。
输出必须如下:*
1,1,“T恤”,2013-10-1,大卫
<3> 3,3,“食物”,2013-11-20,Alex我尝试了类似这样的代码,但Alex被列入了2次。我不明白我怎么能搞清楚。
select *
from Clients t2
left join Orders t1
on t1.cid=t2.cid
where t1.ordertime<getutcdate()
order by t1.ordertime desc**
可能我必须使用Distinct或Group by但我不明白如何。
答案 0 :(得分:0)
Select
x.oid,
x.cid,
x.title,
x.ordertime,
x.cname
From (
Select
o.oid,
o.cid,
o.title,
o.ordertime,
c.cname,
row_number() over (partition by o.cid order by o.ordertime desc) rn
From
Clients c
inner join
Orders o
on c.cid = o.cid
) x
Where
x.rn = 1
答案 1 :(得分:0)
SELECT o.*, c.name
FROM orders o INNER JOIN clients c on o.cid = c.cid
INNER JOIN (SELECT MAX(oid) as latestOrderid, cid FROM orders GROUP BY cid) as latest
on latest.latestorderid= orders.oid
答案 2 :(得分:0)
试试这个:
select o.*, c.cname
from clients c
join orders o on
c.cid = o.cid
and not exists (select *
from orders o2
where o2.cid = o.cid
and o2.ordertime > o.ordertime)