在其他字段值相同的条件下,如何从多条数据中取出时间最近的一个

gong_max 2015-01-11 04:07:23
假设一个用户有多个设备,每个设备有多条记录。每条记录之间只有时间有差异。比如下面的记录
用户 设备 时间
A aaa getdate()
A aaa getdate()-1
B bbb getdate()
B bbb getdate()-1
从这四条记录中取出每个用户最近的一条记录,得到下面的结果集:
A aaa getdate()
B bbb getdate()


请问大家,有没有简单的方法
...全文
1007 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hepe00 2015-01-30
  • 打赏
  • 举报
回复
select * 
from Tb as a
where not exists(select 1 from Tb as b where b.用户=a.用户 and a.设备=b.设备 and b.时间 > a.时间)
Ginnnnnnnn 2015-01-30
  • 打赏
  • 举报
回复


select * 
from TB  a
where not exist (select * from TB where 用户=a.用户 and 时间 > a.时间)
zebro1573 2015-01-30
  • 打赏
  • 举报
回复
select name ,device,MAX(t_date) as t_date,type ,state from #a where state='正常' group by name,device,type,state
还在加载中灬 2015-01-11
  • 打赏
  • 举报
回复
SELECT * FROM(
	SELECT ROW_NUMBER()OVER(PARTITION BY 用户,设备 ORDER BY 时间 DESC)RN
		,*
	FROM TB
)T
WHERE RN=1
SQL 2005+有效
gong_max 2015-01-11
  • 打赏
  • 举报
回复
引用 1 楼 ky_min 的回复:
你的情况可以直接MAX GROUP BY
SELECT 用户,设备,MAX( 时间)
FROM TB
GROUP BY 用户,设备
你好,如果有其他字段不相同的话,又该如何处理?比如下面的记录
用户    设备       时间                     类型         状态
A         aaa      getdate()                 0             正常
A         aaa      getdate()-1             1             报停  
B         bbb     getdate()                  1            报停
B         bbb     getdate()-1              0             正常
我想获得的结果集是:
用户    设备       时间                     类型         状态
A         aaa      getdate()                 0             正常
B         bbb     getdate()                  1             报停
还在加载中灬 2015-01-11
  • 打赏
  • 举报
回复
你的情况可以直接MAX GROUP BY
SELECT 用户,设备,MAX( 时间)
FROM TB
GROUP BY 用户,设备

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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