返回每用户的最近订单记录

O西瓜 2012-09-27 03:37:05
有一订单表结构如下
OrderId UserId CreateTime

OrderId是唯一的,UserId是可以重复的,CreateTime是指下单时间

现要求找出所有用户最近的一笔订单,求帮忙。
比如有用户A和B,A有两条记录,B有三条记录,找出A和B最近的一次交易记录,返回OrderId,UserId,CreateTime
...全文
140 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
O西瓜 2012-09-27
  • 打赏
  • 举报
回复
非常感谢各位的回复,我都做了一一尝试,zhaowenzhong和jinfengyiye的方案是可行的,性能哪个更好不清楚,gogodiy的方案运行结果不对。
gw6328 2012-09-27
  • 打赏
  • 举报
回复
;WITH cte AS (
SELECT rn=ROW_NUMBER() OVER(partition BY userid ORDER BY createtime desc,orderid desc),* FROM tb_order
)
SELECT * FROM cte WHERE rn=1;
gw6328 2012-09-27
  • 打赏
  • 举报
回复
;WITH cte AS (
SELECT rn=ROW_NUMBER() OVER(partition BY userid ORDER BY createtime desc),* FROM tb_order
)
SELECT * FROM cte WHERE rn=1;
gogodiy 2012-09-27
  • 打赏
  • 举报
回复

select * from [订单表] as a where not exists (select 1 from [订单表] where UserId=a.UserId and CreateTime>a.CreateTime)
Felixzhaowenzhong 2012-09-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
SQL code
select orderid,userid,max(createtime)createtime from tb_order
group by orderid,userid
[/Quote]

错了。有问题。 用下面这个

create table tb_order(orderid int,userid int,createtime datetime)
insert tb_order
select 1,1,'2012-09-12 12:00:01'
union select 2,1,'2012-09-12 13:00:01'
union select 3,1,'2012-09-13 13:00:01'
union select 4,2,'2012-09-12 13:00:01'
union select 5,2,'2012-09-13 13:00:01'
union select 6,3,'2012-09-13 13:00:01'
union select 7,3,'2012-09-14 13:00:01'

select a.* from tb_order a join
(select userid,MAX(createtime)createtime from tb_order
group by userid) b on a.userid =b.userid and a.createtime =b.createtime
/*
orderid userid createtime
7 3 2012-09-14 13:00:01.000
5 2 2012-09-13 13:00:01.000
3 1 2012-09-13 13:00:01.000
*/
Felixzhaowenzhong 2012-09-27
  • 打赏
  • 举报
回复
select orderid,userid,max(createtime)createtime from tb_order
group by orderid,userid

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧