oracle查询语句oracle 过滤重复行数据问题

oracle查询过滤重复相同的数据。_百度知道
oracle查询过滤重复相同的数据。
TQ.QA_CHECK_ID qaCheckId,
TA.QA_TYPE type,
TQ.TYPE_DESCRIPTION typeDescription,
TA.QA_CHECK_TYPE checkType,
TQ.CHECK_DESCRIPTION checkDescription,
TQ.CHECK_MX checkMx
FROM T_QA_RULE_DEFINE TA,T_QA_CHECK TQ
TA.QA_TYPE=TQ.TYPE
AND TA.QA_CHECK_TYPE=TQ.CHECK_TYPE
AND TA.VALID_FLAG='Y'T_QA_CHECK为所有的数据T_QA_RULE_DEFINE是区域配置的畅功扳嘉殖黄帮萎爆联数据type为大项,checkType为小项我现在要单独拿type和typeDescription的数据,用DISTINCT去不了重复,该怎么做
OK。搞定了, 一下陷进误区了SELECT DISTINCT TA.TYPE,TA.TYPE_DESCRIPTION FROM t_qa_check TA,t_qa_define TQ
TQ.VALID_FLAG='Y'
AND TA.TYPE=TQ.TYPE
TQ.AREA_CODE=#areaCode:VARCHAR#
提问者采纳
SELECT DISTINCT TA.QA_TYPE
TQ.TYPE_DESCRIPTION
TYPEDESCRIPTION
FROM T_QA_RULE_DEFINE TA, T_QA_CHECK TQ WHERE TA.QA_TYPE = TQ.TYPE
AND TA.QA_CH畅功扳嘉殖黄帮萎爆联ECK_TYPE = TQ.CHECK_TYPE
AND TA.VALID_FLAG = 'Y'只取这两个字段不就行了么,是不是你想要的
取出来,是一个重复N次的我这个表里面是自身关联引用的数据type大项 check_type小项小项跟大项关联
你执行过没有哦 不然就是你的数据不是一样的 比如说有空格等因素
SELECT DISTINCT TA.QA_TYPE
TQ.TYPE_DESCRIPTION
TYPEDESCRIPTION FROM T_QA_RULE_DEFINE TA, T_QA_CHECK TQWHERE TA.QA_TYPE = TQ.TYPE
AND TA.QA_CHECK_TYPE = TQ.CHECK_TYPE
AND TA.VALID_FLAG = 'Y'汗,用我的sql试试看呢,不是只要这两个字段么,怎么你取那么多字段
不对,我区域表只有3条匹配数据但是你的SQL把所有都查出来了
请你把条件加全,看看SELECT DISTINCT TA.QA_TYPE
TQ.TYPE_DESCRIPTION
TYPEDESCRIPTION FROM T_QA_RULE_DEFINE TA, T_QA_CHECK TQWHERE TA.QA_TYPE = TQ.TYPE
AND TA.QA_CHECK_TYPE = TQ.CHECK_TYPE
AND TA.VALID_FLAG = 'Y'--条件你没把整个sql都贴出来,自己检查看看
提问者评价
其他类似问题
为您推荐:
其他1条回答
你这是个伪命题distinct去除的是查畅功扳嘉殖黄帮萎爆联询结构中的重复行看你写的SQL也不是根据大小项去聚合数据的逻辑有问题
T_QA_CHECK为所有的数据T_QA_RULE_DEFINE是区域配置的数据T_QA_RULE_DEFINE里面存放的codeT_QA_CHECK里面有description
所以也要关联起来
oracle的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁编程开发子分类开发/数据库
软件与服务//
ORACLE-删除同一字段中重复值函数
  有时候我们可能需要将查询得到的结果进行重复值的筛选,例如我们用下面的SQL语句查询出结果
  语句:
Select SEQ_NO,REPORT_NO from Imp_Report
  结果:
&&& SEQ_NO    REPORT_NO   -------------------------------   N   905,647,568,647   N   320,222,222
  实际想要的结果:
  SEQ_NO    REPORT_NO   -------------------------------   N   905,647,568   N   320,222
  我自己研究写了个函数
  SQL语句
 1 CREATE OR REPLACE FUNCTION FUN_IMP_REPORT_EXCLUDE_REPEAT(Report_No IN NVARCHAR2)   2   RETURN NVARCHAR2 IS   3   StrReportNo  NVARCHAR2(2000);   4   StrTemp      NVARCHAR2(2000);   5   TempReportNo NVARCHAR2(2000);   6 BEGIN   7   StrReportNo  := '';   8   StrTemp      := '';   9   TempReportNo := Report_No;   10   LOOP   11     --判断参数有没有值   12     IF INSTR(TempReportNo || ',', ',', 1, 1) & 1 THEN   13       --以','分隔截取字段   14       StrTemp := SUBSTR(TempReportNo,   15                         1,   16                         INSTR(TempReportNo || ',', ',', 1, 1) - 1);   17     END IF;   18     --判断是否已经存在相同值,这里前后一定要加分隔符   19     IF INSTR(',' || StrReportNo || ',', ',' || StrTemp || ',', 1, 1) = 0 THEN   20       --累加不同结果   21       StrReportNo := StrReportNo || ',' || StrT   22     END IF;   23     --将判断过的字段删除掉   24     TempReportNo := SUBSTR(TempReportNo,   25                            INSTR(TempReportNo || ',', ',', 1, 1) + 1);   26     --参数所有值完成过滤判断后跳出循环   27     EXIT WHEN length(TempReportNo) = 0 or TempReportNo is    28   END LOOP;   29   RETURN SUBSTR(StrReportNo, 2); --累加时其实是以','开始的   30 END FUN_IMP_REPORT_EXCLUDE_REPEAT;
  最终的SQL语句:
  Select SEQ_NO,FUN_IMP_REPORT_EXCLUDE_REPEAT(REPORT_NO) from Imp_Report
  出处:
&&& 编辑推荐:
关键词:最新更新,ORACLE
责任编辑:陈超
All Rights Reserved, Copyright , .cn渝ICP证B2-号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i
京公网安备84号Oracle&排序过滤重复数据,取最新的数据
问题:在项目中有一张设备检测信息表DEVICE_INFO_TBL,
每个设备每天都会产生一条检测信息,现在需要从该表中检索出每个设备的最新检测信息。也就是device_id字段不能重复,消除device_id字段
重复的记录,而且device_id对应的检测信息test_result是最新的。
解决思路:用Oracle的row_number() over函数来解决该问题。
解决过程:
&1.查看表中的重复记录
&t.device_id,
& & t.update_dtm,
t.test_result
from DEVICE_INFO_TBL t
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://hi.csdn.net/attachment//r.jpg" ALT="查看重复数据" HEIGHT="145" WIDTH="404" NAME="image_operate_75421"
TITLE="Oracle&排序过滤重复数据,取最新的数据" />
2.标记重复的记录
&t.device_id,
& & t.update_dtm,
t.test_result,
&row_number() OVER(PARTITION BY device_id ORDER BY
t.update_dtm desc) as row_flg&
from DEVICE_INFO_TBL t
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://hi.csdn.net/attachment//SC.jpg" ALT="标记重复记录" HEIGHT="145" WIDTH="490"
TITLE="Oracle&排序过滤重复数据,取最新的数据" />
3.过滤重复数据,取得最新的记录
&temp.device_id,
& & temp.update_dtm,
temp.test_result
&&&&&&&&&&&&
&&&&&&&&&&&&&t.device_id,
&&&&&&&&&&&&
t.update_dtm,
&&&&&&&&&&&&
t.test_result,
&&&&&&&&&&&&
row_number() OVER(PARTITION BY device_id ORDER BY t.update_dtm
desc) as row_flg& &
from DEVICE_INFO_TBL t&) temp
where temp.row_flg&&=
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://hi.csdn.net/attachment//4725104cBCS.jpg" ALT="过滤重复数据" HEIGHT="117" WIDTH="405" NAME="image_operate_76952"
TITLE="Oracle&排序过滤重复数据,取最新的数据" />
row_number() OVER (PARTITION BY COL1 ORDER BY COL2)
表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).
  与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪列rownum然后再进行排序,而此函数在包含排序从句后是先排序再计算行号码.
  row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序).
  rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内).
  dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的 .
  lag(arg1,arg2,arg3):
&& arg1是从其他行返回的表达式
arg2是希望检索的当前行分区的偏移量。是一个正的偏移量,时一个往回检索以前的行的数目。
arg3是在arg2表示的数目超出了分组的范围时返回的值。
转自:http://blog.csdn.net/amilychen/article/details/6904083
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 oracle分页查询语句 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信