zoukankan      html  css  js  c++  java
  • SQL按照某一列数据去重并显示整行信息(以一列为基准去重)

    总会碰到一些奇奇怪怪的需求,各种加字段阿、建视图阿等等,然后使用了group by 还是没有达到想要的结果,那咋办嘛。

    0.需求背景 

     根据MLOT重复字段 取 TRANSACTIONTIME 最小时间的一列,  (MLOT已经用过group by分组 order by排序)

     所以我们可以用(ROWNUM)伪列函数 +  (MAX)取最大值函数 ||  (MIN)取最小值函数配合 再次使用group by 分组

    1.首先把问题表加上伪列(rownum)--记得根据你要分组的列排序一下

    --表记得改你自己的--   请参考 select rownum rn,a.* from 你的表 a
    /* Formatted on 2020/4/12 9:37:03 (QP5 v5.256.13226.35538) */
    SELECT ROWNUM RN, a.*
      FROM (  SELECT *
                FROM epidm.B_DM_MMS_PVD_INOUT
               WHERE MLOT IN ('P3DAR1931509',
                              'P3DAR1931510',
                              'P3DAR1931601',
                              'P3DAR1931602',
                              'P3DAR1931610',
                              'P3DAR1931611')
            ORDER BY MLOT) a

     2.然后再根据用过伪列的sql当作一张表进行子查询

     -- 子查询且分组  当然你也可以再GROUP BY MLOT 前面进行 where 筛选                    
    /* Formatted on 2020/4/12 9:34:48 (QP5 v5.256.13226.35538) */
    SELECT *
      FROM (SELECT ROWNUM rn, a.*
              FROM (  SELECT *
                        FROM epidm.B_DM_MMS_PVD_INOUT
                       WHERE MLOT IN ('P3DAR1931509',
                                      'P3DAR1931510',
                                      'P3DAR1931601',
                                      'P3DAR1931602',
                                      'P3DAR1931610',
                                      'P3DAR1931611')
                    ORDER BY MLOT) a) B
     WHERE rn IN (  SELECT MIN (rn)
                      FROM (SELECT ROWNUM rn, a.*
                              FROM (  SELECT *
                                        FROM epidm.B_DM_MMS_PVD_INOUT
                                       WHERE MLOT IN ('P3DAR1931509',
                                                      'P3DAR1931510',
                                                      'P3DAR1931601',
                                                      'P3DAR1931602',
                                                      'P3DAR1931610',
                                                      'P3DAR1931611')
                                    ORDER BY MLOT) a) B
                  GROUP BY MLOT)
                  

     W.参考模板

    /* Formatted on 2020/4/12 9:46:14 (QP5 v5.256.13226.35538) */
    SELECT *
      FROM 你的表
     WHERE 伪列名称 IN (  SELECT MAX (伪列名称)
                                FROM 你的表
                            GROUP BY 你要分组的列) --也可以进行where 筛选
    --首先table 表要有rownum伪列函数 并取个名称  这里我取的是rn
    select * from table
    where rn in (select Max(rn) from table group by mlot)
  • 相关阅读:
    java并发包——Semaphore(信号量)
    cnblogs
    linux下安装python3及对应的pip环境
    Swing实现AES加密&解密工具升级
    Netty——知识点总结
    RPC——看这一篇就…显然不够
    ORM——Mybatis
    com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException问题解决
    设计模式分类及常用设计模式
    Java 语言特性【四】——其他
  • 原文地址:https://www.cnblogs.com/lin02/p/12683826.html
Copyright © 2011-2022 走看看