sql重復數據只取一條 如何刪除sql中某個字段出現重復的數據,且只保留id最小的?
如何刪除sql中某個字段出現重復的數據,且只保留id最小的?其實非常的簡單,只需要把你這張表當成兩張表來處理就行了。DELETE p1 from TABLE p1, TABLE p2 WHERE p1
如何刪除sql中某個字段出現重復的數據,且只保留id最小的?
其實非常的簡單,只需要把你這張表當成兩張表來處理就行了。DELETE p1 from TABLE p1, TABLE p2 WHERE p1.name = p2.name AND p1.email = p2.email AND p1.id < p2.id這里有個問題,題主說保留最新的那一條(也就是ID最小的那個),既然是遞增,最新的不應該是最大的那條嗎?上面的的語句,p1.id < p2.id,所以獲取到的是id最大的,因為p1.id小于p2.id就會被刪除,只有最大的值不滿足。如果要獲取id最小的那個,只需要把"<"改成">"即可。當然是用group by,count可以更精準控制重復n次的情況。不過目測樓主需求應該只要把重復的刪掉,保留最新的就可以了。
如何用sql語句處理兩表聯查的相同字段時,只保留有數據的字段?
比如說現在有一個user表一個role表,都有一個USERNAME 字段,關聯字段也是USERNAME,這里只查詢USERNAME字段不為null的一方的值SELECT CASE WHEN u.USERNAME IS NOT NULL THEN u.USERNAMEWHEN r.USERNAME IS NOT NULL THEN r.USERNAME ENDFROM [USER] u RIGHT JOIN ROLE r ON u.USERNAME = r.USERNAME
關于SQL,如果一個表中的某個字段有重復值,重復值我只取一個應該怎么做呢?
用SQL嵌套比較好,SQL也比較清楚,
內層SQL,datepart(day,timestr)或convert 找到所有12月份,每個人提交日報的日期是每月的第幾天,并生成一個字段,distinct確保只記錄每天只保留一個 datepart(date,timestr)把每人的提交那一天找出來
外層SQL統計每個人有幾天:
select username,count(*) from (select distinct username, datepart(dd,timestr) as userday from a
where datepart(mm,timestr)=12)
group by username