SQL-仅为以前订购过的每个客户端选择最后一次订购

SQL-仅为以前订购过的每个客户端选择最后一次订购,sql,sql-server-2008,Sql,Sql Server 2008,有2个表,我只想为之前订购的每个客户选择最后一个订单 (cid,cname)客户表 1,大卫 2、汤姆 3,亚历克斯 (oid、cid、标题、订单时间)订单表 1,1,“T恤”,2013-10-1 2,3,“球”,2013-10-1 3,3,“食品”,2013-11-20 *根据汤姆以前从未点过的桌子。所以他不会被列入名单。Alex之前订购了2次,我只想显示最后一次订购 输出必须如下所示: 1,1,“T恤”,2013-10-1,大卫 3,3,“食品”,2013-11-20,亚历克斯 我试过类似的

有2个表,我只想为之前订购的每个客户选择最后一个订单

(cid,cname)客户表

1,大卫

2、汤姆

3,亚历克斯

(oid、cid、标题、订单时间)订单表

1,1,“T恤”,2013-10-1

2,3,“球”,2013-10-1

3,3,“食品”,2013-11-20

*根据汤姆以前从未点过的桌子。所以他不会被列入名单。Alex之前订购了2次,我只想显示最后一次订购

输出必须如下所示:

1,1,“T恤”,2013-10-1,大卫

3,3,“食品”,2013-11-20,亚历克斯

我试过类似的代码,但Alex被列了两次。我不明白我怎么能弄明白

select * 
from   Clients t2 
  left join Orders t1 
  on t1.cid=t2.cid 
where t1.ordertime<getutcdate() 
order by t1.ordertime desc**
选择*
来自客户t2
左连接顺序t1
在t1.cid=t2.cid上
其中t1.ordertime尝试以下方法:

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) 

MAX(oid)不一定会给你最新的订单(虽然实际上可能会),同意,我在那里做了一个假设!
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
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)