按照某個字段分組,然后按時間降序排序 取每組第一條


 

SELECT * FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY 某字段1 ORDER BY 某字段1,某時間字段2 DESC ) rn FROM table) t WHERE rn = 1 

 

例如 : 

EduCompetitionofStudents 表中有重復數據,重復字段除了主鍵【Id】和創建時間【CreationTime】 不重復以外其他字段都重復,需求是查詢過濾掉重復數據,根據某個不應該重復的字段過濾【studentId】
SELECT * FROM (
  
                  SELECT *, ROW_NUMBER() OVER (PARTITION BY StudentId ORDER BY  CreationTime DESC) rn FROM EduCompetitionofStudents 
                  WHERE   CONVERT(varchar(100),  CreationTime, 23) = CONVERT(char, dateadd(DD, -1, getdate()), 23) AND    CompetitionId=92 AND  id IS NOT NULL
                  
                ) t
           WHERE rn = 1  

 




分析:

1.根據StudentId分組:PARTITION BY StudentId 按照需求字段排序:ORDER BY CreationTime DESC

 

 


2.如果對重復數據有其他條件限制,例如只過濾昨天的重復數據,或者只過濾掉某個特定條件下的重復數據 條件要寫在最里層,要條件過后再分組排序

 

 


3.分組后取每組第一條:WHERE rn = 1

 

 

 

 


免責聲明!

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



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