• 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)
  • 相关阅读:
    FineBI客户画像分析与客户价值模型快速入门
    大数据分析免费学习教程
    Xshell连接不上Ubuntu解决方式
    Jenkins时区设置为北京时间
    ASP.NET Core 与支付宝开发文档
    .NET Core 从 Github到 Nuget 持续集成、部署
    使用 dotnet cli 命令上传 nuget 程序包
    发布你的程序包到Nuget
    ASP.NET Core 判断请求是否为Ajax请求
    ASP.NET Core 如何在运行Docker容器时指定容器外部端口(docker compose)
  • 原文地址:https://www.cnblogs.com/lin02/p/12683826.html
Copyright © 2020-2023  润新知