表结构
id 设备id 操作时间
1 1 2009-09-09
2 2 2009-09-10
3 1 2010-09-01
4 2 2010-01-01
5 2 2010-01-02
我要通过查询每个设备最近的操作时间获得数据要求结果id 设备id 操作时间3 1 2010-09-015 2 2010-01-02 一定要ID号
id 设备id 操作时间
1 1 2009-09-09
2 2 2009-09-10
3 1 2010-09-01
4 2 2010-01-01
5 2 2010-01-02
我要通过查询每个设备最近的操作时间获得数据要求结果id 设备id 操作时间3 1 2010-09-015 2 2010-01-02 一定要ID号
解决方案 »
- PL/SQL存储过程为什么没有插入数据?
- 关于oracle的小问题求指教
- 跪求oracle8i客户端
- 统计邮件地址,有个字段存放着邮件地址(一个或多个,用逗号分隔)怎么统计?
- 我用sum求出两个字段个子的和值,怎么用sql把这两个字段的和值在求和一起显示出来
- 【求助砖家,求助斑竹】ORACLE进程占用%sys高
- 在存储过程中,如何对计算公式类的字符串解析?
- 为什么刚编译过的存储过程在第一次调用时不成功?说找不到该存储过程?以后调用就没有问题了。
- sql分页查询怎么写,每页10条
- 如何通过查询获取表空间中包含某特定字符的所有表名称?
- 各位大虾紧急救命,数据库启动报ORA-01113,ORA-01110的错,不知道怎么处理!!
- Oracle 10 用正则表达式查找全角字符
3 1 2010-09-01
4 2 2010-01-01 SELECT * FROM TAB
WHERE (设备id,操作时间) IN (
SELECT 设备id,min(操作时间) from tab group by 设备id
)
select * from (select t.*,row_number() over(partition by sbid order by operdate desc) num from tab t) where num=1
where [操作时间] in (SELECT max([操作时间]) from tbl(nolock) group by [设备id])
按楼主的意思,这个查出来应该是符合要求的。若存在一个设备同一天操作两次的情况,则需要增加DISTINCT操作。
select distinct * from tbl
where [操作时间] in (SELECT max([操作时间]) from tbl(nolock) group by [设备id])
select id,设备id,操作时间,
row_number() over(partition by 设备id orber by 操作时间 desc) rn
from table
where rn=1select id,设备id,操作时间
from table
where 操作时间 in(select a.操作时间 from(select 设备id,max(操作时间) as 操作时间 from table group by 设备id) a)
with temp as(
select 1 id,1 设备id, to_date('2009-09-09','yyyy-mm-dd') 操作时间 from dual
union all
select 2 id,2 设备id, to_date('2009-09-10','yyyy-mm-dd') 操作时间 from dual
union all
select 3 id,1 设备id, to_date('2010-09-01','yyyy-mm-dd') 操作时间 from dual
union all
select 4 id,2 设备id, to_date('2010-01-01','yyyy-mm-dd') 操作时间 from dual
union all
select 5 id,2 设备id, to_date('2010-01-02','yyyy-mm-dd') 操作时间 from dual
)
select max(id) id,设备id,max(操作时间) 操作时间 from temp group by 设备id