删除组中的行除了其中一个SQL

时间:2016-04-13 12:42:23

标签: sql sql-server distinct common-table-expression

我遇到这种情况:

enter image description here

我需要删除一个不同的行,我的意思是,只需要一个" 1,1,1,"并且只需要一个" 2,2,2和#34;在SQL上的CTE,但你怎么看我不能使用不同的。

3 个答案:

答案 0 :(得分:2)

WITH    t AS
        (
        SELECT  *,
                ROW_NUMBER() OVER (PARTITION BY col1, col2, col3) ORDER BY (id) rn
        FROM    mytable
        )
DELETE
FROM    t
WHERE   rn > 1

答案 1 :(得分:1)

我可以提出一些简单的建议:

CREATE TABLE tmp_table AS
SELECT DISTINCT col1,col2,col3 FROM YourTable;

DELETE FROM YourTable;

INSERT INTO YourTable
SELECT * FROM tmp_table;

DROP TABLE tmp_table;

这将基本上使用临时表重新创建具有不同值的表。

注意:有更有效的方法可以做到这一点,但您没有指定您的DBMS,它可能会从一个更改为另一个。此解决方案适用于ANSI SQL

答案 2 :(得分:0)

java -jar your-jar-file.jar

如果您阅读有关Row_Number(),Rank(),DenseRank()

的更多信息,那就太好了