[PHP]使用SQL去除sid重复项,并且保留id最大的内容

  1. 以sid为组,查询不同sid的最大id,和sid相同的个数
SELECT
 a.sid, 
 max(a.id), 
 COUNT(a.id) AS idcount
FROM
 vr_report AS a
GROUP BY
 a.sid
HAVING
 COUNT(a.id) > 1
ORDER BY
 a.sid ASC
  1. 搜索表,当sid相同,但id不为最高id的时候
SELECT
 b.* 
FROM
 vr_report AS b 
WHERE
 b.sid IN ((
     SELECT
         a.sid 
     FROM
         vr_report AS a 
     GROUP BY
         a.sid 
     HAVING
         COUNT( a.id ) > 1 
     )) 
 AND b.id NOT IN ((
     SELECT
         MAX( c.id ) 
     FROM
         vr_report AS c 
     GROUP BY
         c.sid 
     HAVING
         COUNT( c.id ) > 1 
     )) 
ORDER BY
 b.sid ASC
  1. 用select 做一个中转表, 直接使用会报错
SELECT
 d.id 
FROM
 (
 SELECT
     b.* 
 FROM
     vr_report AS b 
 WHERE
     b.sid IN ((
         SELECT
             a.sid 
         FROM
             vr_report AS a 
         GROUP BY
             a.sid 
         HAVING
             COUNT( a.id ) > 1 
         )) 
     AND b.id NOT IN ((
         SELECT
             MAX( c.id ) 
         FROM
             vr_report AS c 
         GROUP BY
             c.sid 
         HAVING
             COUNT( c.id ) > 1 
         )) 
 ORDER BY
 b.sid ASC 
 ) AS d
  1. 删除非必要信息
DELETE 
FROM
 vr_report 
WHERE
 id IN (
 SELECT
     d.id 
 FROM
     (
     SELECT
         b.* 
     FROM
         vr_report AS b 
     WHERE
         b.sid IN ((
             SELECT
                 a.sid 
             FROM
                 vr_report AS a 
             GROUP BY
                 a.sid 
             HAVING
                 COUNT( a.id ) > 1 
             )) 
         AND b.id NOT IN ((
             SELECT
                 MAX( c.id ) 
             FROM
                 vr_report AS c 
             GROUP BY
                 c.sid 
             HAVING
                 COUNT( c.id ) > 1 
             )) 
     ORDER BY
     b.sid ASC 
 ) AS d)

猜你喜欢

转载自blog.csdn.net/JianShengShuaiest/article/details/120129516