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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM