问个数据库的问题

jinhui402407250 2010-09-10 11:50:12
insert into test(username,time1,time2,num)
select 'as1','2010-09-08 10:50','2010-09-08 10:58','10' union
select 'as1','2010-09-08 10:50','2010-09-08 11:58','15' union
select 'as1','2010-09-08 11:30','2010-09-08 12:58','16' union
select 'as1','2010-09-08 11:30','2010-09-08 13:58','8' union
select 'as2','2010-09-08 13:50','2010-09-08 10:58','10' union
select 'as2','2010-09-08 13:50','2010-09-08 11:58','15' union
select 'as2','2010-09-08 11:30','2010-09-08 12:58','16' union
select 'as2','2010-09-08 11:30','2010-09-08 13:58','8'

根据username来先分组,然后取time1最大的那条记录,如果time1有相等的就取 time2较大的那条记录
结果如下
4 as1 2010-09-08 11:30:00.000 2010-09-08 13:58:00.000 8
8 as2 2010-09-08 13:50:00.000 2010-09-08 11:58:00.000 15

除了以下这种方法,还有比较简便的写法吗?
select c.* from test c ,
(
select b.username, max(time2)time2 from test b,
(
select username, max(time1) time1 from test
group by username
)a where b.username=a.username and b.time1=a.time1
group by b.username
)d where c.time2=d.time2 and c.username=d.username
...全文
96 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
尐孑 2010-09-10
  • 打赏
  • 举报
回复
关注
jinhui402407250 2010-09-10
  • 打赏
  • 举报
回复
2楼的不错,还有没有别的方法啊
kissesyan 2010-09-10
  • 打赏
  • 举报
回复

Select * from (
select rank() over(partition by userName order by time1 desc,time2 desc) as Rows,
* from dbo.test) a
where Rows=1

62,272

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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