sql重復(fù)數(shù)據(jù)只取一條 如何刪除sql中某個(gè)字段出現(xiàn)重復(fù)的數(shù)據(jù),且只保留id最小的?
如何刪除sql中某個(gè)字段出現(xiàn)重復(fù)的數(shù)據(jù),且只保留id最小的?其實(shí)非常的簡單,只需要把你這張表當(dāng)成兩張表來處理就行了。DELETE p1 from TABLE p1, TABLE p2 WHERE p1
如何刪除sql中某個(gè)字段出現(xiàn)重復(fù)的數(shù)據(jù),且只保留id最小的?
其實(shí)非常的簡單,只需要把你這張表當(dāng)成兩張表來處理就行了。DELETE p1 from TABLE p1, TABLE p2 WHERE p1.name = p2.name AND p1.email = p2.email AND p1.id < p2.id這里有個(gè)問題,題主說保留最新的那一條(也就是ID最小的那個(gè)),既然是遞增,最新的不應(yīng)該是最大的那條嗎?上面的的語句,p1.id < p2.id,所以獲取到的是id最大的,因?yàn)閜1.id小于p2.id就會(huì)被刪除,只有最大的值不滿足。如果要獲取id最小的那個(gè),只需要把"<"改成">"即可。當(dāng)然是用group by,count可以更精準(zhǔn)控制重復(fù)n次的情況。不過目測(cè)樓主需求應(yīng)該只要把重復(fù)的刪掉,保留最新的就可以了。
如何用sql語句處理兩表聯(lián)查的相同字段時(shí),只保留有數(shù)據(jù)的字段?
比如說現(xiàn)在有一個(gè)user表一個(gè)role表,都有一個(gè)USERNAME 字段,關(guān)聯(lián)字段也是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
關(guān)于SQL,如果一個(gè)表中的某個(gè)字段有重復(fù)值,重復(fù)值我只取一個(gè)應(yīng)該怎么做呢?
用SQL嵌套比較好,SQL也比較清楚,
內(nèi)層SQL,datepart(day,timestr)或convert 找到所有12月份,每個(gè)人提交日?qǐng)?bào)的日期是每月的第幾天,并生成一個(gè)字段,distinct確保只記錄每天只保留一個(gè) datepart(date,timestr)把每人的提交那一天找出來
外層SQL統(tǒng)計(jì)每個(gè)人有幾天:
select username,count(*) from (select distinct username, datepart(dd,timestr) as userday from a
where datepart(mm,timestr)=12)
group by username