SQL查询,难倒我了,谁能帮帮忙,谢了
时间:2011-11-09
来源:互联网
EQUIP_ID,ERROR_CODE,UPDATE_TIME
001, 1, 2011-10-22 08:01:00
001, 1, 2011-10-22 08:01:00
002, 2, 2011-10-22 08:00:00
002, 2, 2011-10-22 07:50:00
002, 1, 2011-10-22 07:45:00
002, 1, 2011-10-22 07:40:00
002, 1, 2011-10-22 07:30:00
我想查询出这样的结果,过滤掉重复上传的信息,保留每个设备每个故障最新(最后)上传的的一条。
EQUIP_ID,ERROR_CODE,UPDATE_TIME
001, 1, 2011-10-22 08:01:00
002, 2, 2011-10-22 08:00:00
002, 1, 2011-10-22 07:45:00
作者: harry960 发布时间: 2011-11-09
select m.* from tb m where m.UPDATE_TIME = (select max(UPDATE_TIME) from tb n where n.EQUIP_ID = m.EQUIP_ID)
作者: dawugui 发布时间: 2011-11-09
SQL code
SELECT EQUIP_ID, ERROR_CODE, UPDATE_TIME FROM (SELECT EQUIP_ID, ERROR_CODE, UPDATE_TIME, ROW_MUNBER() OVER(PARTITION BY EQUIP_ID, ERROR_CODE ORDER BY UPDATE_TIME DESC) RN FROM TAB1) WHERE RN = 1
作者: tx2730 发布时间: 2011-11-09
select EQUIP_ID,ERROR_CODE,UPDATE_TIME ( select EQUIP_ID,ERROR_CODE,UPDATE_TIME, row_number()over(partition by EQUIP_ID,ERROR_CODE,UPDATE_TIME order by update_time desc) rn from tb )where rn=1
作者: cosio 发布时间: 2011-11-09
select EQUIP_ID,ERROR_CODE,UPDATE_TIME ( select EQUIP_ID,ERROR_CODE,UPDATE_TIME, row_number()over(partition by EQUIP_ID,ERROR_CODE order by update_time desc) rn from tb )where rn=1
作者: cosio 发布时间: 2011-11-09
作者: opps_zhou 发布时间: 2011-11-09
SQL code
SELECT equipId, errorcode, MAX(updatetime) FROM t3 GROUP BY equipid, errorcode;
作者: LuiseRADL 发布时间: 2011-11-09
SQL code
SELECT t.equip_id,error_code,MAX(update_time) FROM t GROUP BY t.equip_id,t.error_code ORDER BY t.equip_id,t.error_code
作者: hudingchen 发布时间: 2011-11-09
简单分组就可以做到。
SQL code
SELECT equipId, errorcode, MAX(updatetime) FROM t3
GROUP BY equipid, errorcode;
作者: BenChiM888 发布时间: 2011-11-09

作者: a120255857 发布时间: 2011-11-09
现在才看清楚,如楼上说的,其实简单分组即可.
作者: dawugui 发布时间: 2011-11-09
修改后如下:
有这样的数据库表,存储每次设备发送的故障信息
EQUIP_ID,ERROR_CODE,UPDATE_TIME
001, 1, 2011-10-22 08:10:00
001, 1, 2011-10-22 08:02:00
002, 2, 2011-10-22 08:00:00
002, 2, 2011-10-22 07:50:00
002, 1, 2011-10-22 07:45:00
002, 1, 2011-10-22 07:40:00
002, 1, 2011-10-22 07:30:00
001, 1, 2011-10-22 07:10:00
001, 1, 2011-10-22 07:08:00
我想查询出这样的结果,过滤掉重复上传的信息,保留每个设备每个故障最早上传的的一条。
EQUIP_ID,ERROR_CODE,UPDATE_TIME
001, 1, 2011-10-22 08:02:00
002, 2, 2011-10-22 07:50:00
002, 1, 2011-10-22 07:30:00
001, 1, 2011-10-22 07:08:00
作者: harry960 发布时间: 2011-11-09
001, 1, 2011-10-22 08:02:00
002, 2, 2011-10-22 07:50:00
002, 1, 2011-10-22 07:30:00
001, 1, 2011-10-22 07:08:00
怎么还有两条呢???
不能用Group by就用row_number试试看
SQL code
SELECT EQUIP_ID, ERROR_CODE, UPDATE_TIME FROM (SELECT EQUIP_ID, ERROR_CODE, UPDATE_TIME, ROW_MUNBER() OVER(PARTITION BY EQUIP_ID, ERROR_CODE ORDER BY UPDATE_TIME DESC) RN FROM TAB1) WHERE RN = 1
作者: tx2730 发布时间: 2011-11-09
这个设备的总故障数量是3次,不是2次,也不是9次。
作者: harry960 发布时间: 2011-11-09
作者: tx2730 发布时间: 2011-11-09
作者: harry960 发布时间: 2011-11-09
001, 1, 2011-10-22 08:10:00
001, 1, 2011-10-22 08:02:00
002, 2, 2011-10-22 08:00:00
002, 2, 2011-10-22 07:50:00
002, 1, 2011-10-22 07:45:00
002, 1, 2011-10-22 07:40:00
002, 1, 2011-10-22 07:30:00
001, 1, 2011-10-22 07:10:00
001, 1, 2011-10-22 07:08:00
按照你的需求:每个设备每个故障最早上传的的一条。
上面的4条记录不是同一个设备同一个故障吗?你要得结果是怎么变成下面的?
EQUIP_ID,ERROR_CODE,UPDATE_TIME
001, 1, 2011-10-22 08:02:00
002, 2, 2011-10-22 07:50:00
002, 1, 2011-10-22 07:30:00
001, 1, 2011-10-22 07:08:00
作者: hudingchen 发布时间: 2011-11-09
不能依赖数据本身的顺序,因为数据本身是无序的.
作者: tx2730 发布时间: 2011-11-09
上面的4条记录不是同一个设备同一个故障吗?你要得结果是怎么变成下面的?
你说的对,手写内容就是麻烦,把数据库的粘贴过来又太长不便于分析。
改成下边的就是3个状态了。
001, 1, 2011-10-22 08:10:00
001, 1, 2011-10-22 08:02:00
001, 2, 2011-10-22 07:50:00
001, 2, 2011-10-22 07:40:00
001, 1, 2011-10-22 07:10:00
001, 1, 2011-10-22 07:08:00
作者: harry960 发布时间: 2011-11-09
001, 1, 2011-10-22 08:02:00
001, 2, 2011-10-22 07:50:00
001, 2, 2011-10-22 07:40:00
001, 1, 2011-10-22 07:10:00
001, 1, 2011-10-22 07:08:00
三个大写就是你要的结果吧!
作者: cosio 发布时间: 2011-11-09
比如先出现2次故障1(A,B),再出现3次故障2(C,D,E),然后再出现2次故障1(F,G),
你时间要统计的是B,E,G,不知道这样理解是否正确!
作者: jg_huang 发布时间: 2011-11-09
--是否这样的 -----------------------------> SQL> SQL> with t as ( 2 select '001' EQUIP_ID,1 ERROR_CODE,'2011-10-22 08:01:00' UPDATE_TIME from dual 3 union all 4 select '001' EQUIP_ID,1 ERROR_CODE,'2011-10-22 08:01:00' UPDATE_TIME from dual 5 union all 6 select '002' EQUIP_ID,2 ERROR_CODE,'2011-10-22 08:00:00' UPDATE_TIME from dual 7 union all 8 select '002' EQUIP_ID,2 ERROR_CODE,'2011-10-22 07:50:00' UPDATE_TIME from dual 9 union all 10 select '002' EQUIP_ID,1 ERROR_CODE,'2011-10-22 07:45:00' UPDATE_TIME from dual 11 union all 12 select '002' EQUIP_ID,1 ERROR_CODE,'2011-10-22 07:40:00' UPDATE_TIME from dual 13 union all 14 select '002' EQUIP_ID,1 ERROR_CODE,'2011-10-22 07:30:00' UPDATE_TIME from dual 15 union all 16 select '001' EQUIP_ID,1 ERROR_CODE,'2011-10-22 07:10:00' UPDATE_TIME from dual 17 union all 18 select '001' EQUIP_ID,1 ERROR_CODE,'2011-10-22 07:08:00' UPDATE_TIME from dual) 19 SELECT EQUIP_ID, ERROR_CODE, MIN(UPDATE_TIME) FROM t 20 GROUP BY EQUIP_ID, ERROR_CODE; EQUIP_ID ERROR_CODE MIN(UPDATE_TIME) -------- ---------- ------------------- 002 2 2011-10-22 07:50:00 002 1 2011-10-22 07:30:00 001 1 2011-10-22 07:08:00 SQL>
作者: xl_smlie 发布时间: 2011-11-09
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28