代码之家  ›  专栏  ›  技术社区  ›  user3396478

保留前N行数并删除其余行

  •  2
  • user3396478  · 技术社区  · 11 年前

    试图编写一个sql,它将保留表的前N行,并删除其余的行。我已经想出了这个sql,但它说我不能在这里使用计数。请帮我重新编写sql。

    DELETE 
      FROM ZZ_TEST_FINTABLE
     WHERE PROCESS_INSTANCE = ( 
     SELECT MIN(B.PROCESS_INSTANCE) 
      FROM ZZ_TEST_FINTABLE B) 
       AND COUNT(PROCESS_INTANCE) > 9
    
    3 回复  |  直到 11 年前
        1
  •  0
  •   Orhun D.    11 年前

    也许这对您有用(使用Oracle DB)

    DELETE FROM
        ZZ_TEST_FINTABLE 
    WHERE
        PROCESS_INSTANCE NOT IN 
        (
            SELECT PROCESS_INSTANCE 
            FROM ZZ_TEST_FINTABLE 
            WHERE ROWNUM < 9
        );
    
        2
  •  0
  •   Karim Daraf    11 年前

    您应该使用HAVING而不是AND。

       DELETE 
       FROM ZZ_TEST_FINTABLE
       WHERE PROCESS_INSTANCE = ( 
                                SELECT MIN(B.PROCESS_INSTANCE) 
                                 FROM ZZ_TEST_FINTABLE B
                                ) 
       HAVING COUNT(PROCESS_INTANCE) > 9
    

    或者这个

        DELETE 
        FROM ZZ_TEST_FINTABLE A
        INNER JOIN ZZ_TEST_FINTABLE B ON A.PROCESS_INSTANCE= MIN(B.PROCESS_INSTANCE)
        HAVING COUNT(PROCESS_INTANCE) > 9
    
        3
  •  0
  •   crig    11 年前

    您必须为您的表修改此项,但应该可以:

    DELETE FROM myschema.mytable WHERE pkey NOT IN (SELECT pkey FROM myschema.mytable ORDER BY pkey FETCH FIRST 10 ROWS ONLY)