SQL中遇到多條相同內容只取一條的最簡單實現


  從多個版本記錄中保留最新版本

 
         
* 二層分支的情況:
* SELECT obj FROM ZxlPrdRequestModule obj
* LEFT JOIN ZxlPrdProductBranchFilter ppbf ON ppbf.hid=obj.hid
* AND ppbf.branchProductId IN :productIdList
* WHERE ( (obj.zxlPrdId=:zxlPrdId AND obj.active=1)
* OR (obj.zxlPrdId=:baseProductId1 AND obj.versionId<=:baseProductVersionId1 AND ppbf.active IS NULL)
* OR (obj.zxlPrdId=:baseProductId2 AND obj.versionId<=:baseProductVersionId2 AND ppbf.active IS NULL) )
* AND NOT (obj.editOpType='DELETE' AND obj.editOpStatus='CONFIRMED')
*
* AND NOT EXISTS(SELECT 1 FROM ZxlPrdRequestModule _obj
* WHERE ( (_obj.zxlPrdId=:zxlPrdId AND _obj.active=1)
* OR (_obj.zxlPrdId=:baseProductId1 AND _obj.versionId<=:baseProductVersionId1 AND ppbf.active IS NULL)
* OR (_obj.zxlPrdId=:baseProductId2 AND _obj.versionId<=:baseProductVersionId2 AND ppbf.active IS NULL) )
* AND NOT (_obj.editOpType='DELETE' AND _obj.editOpStatus='CONFIRMED')
* AND obj.moduleId=_obj.moduleId AND obj.versionId<_obj.versionId)
 

 

=========================下面內容轉載=========================

轉自:SQL中遇到多條相同內容只取一條的最簡單實現

 

SQL中經常遇到如下情況,在一張表中有兩條記錄基本完全一樣,某個或某幾個字段有些許差別, 這時候可能需要我們踢出這些有差別的數據,即兩條或多條記錄中只保留一項。 

如下:表timeand


針對time字段相同時有不同total和name的情形,每當遇到相同的則只取其中一條數據,最簡單的實現方法有兩種

每當遇到相同的則只取其中一條數據,最簡單的實現方法有兩種

 
1、select time,max(total) as total,name from timeand group by time;//取記錄中total最大的值


 
或 select time,min(total) as total,name from timeand group by time;//取記錄中total最小的值


 
上述兩種方案都有個缺點,就是無法區分name字段的內容,所以一般用於只有兩條字段或其他字段內容完全一致的情況
 
2、select * from timeand as a where not exists(select 1 from timeand where a.time = time and a.total<total);


 
此中方案排除了方案1中name字段不准確的問題,取的是total最大的值
---


免責聲明!

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



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