1

これまで答えが見つからなかった問題に悩まされています。

次のようなテーブルがあります。

column1 | column2 | column3
---------------------------
name1   | 3       | 12
name1   | 3       | 10
name1   | 2       | 17
name2   | 3       | 15
name2   | 3       | 15
name2   | 2       | 11

column2column3 の値が最も高くない行 (Column2優先度がある)を削除するにはどうすればよいですか?

結果は次のようになります。

column1 | column2 | column3
---------------------------
name1   | 3       | 12
name2   | 3       | 15
name2   | 3       | 15
4

2 に答える 2

0

次のようなクエリを使用できます。

DELETE FROM yourtable
WHERE
  (column1, column2, column3) NOT IN (
    SELECT * FROM (
      SELECT yourtable.column1, yourtable.column2, max(column3) max_column3
      FROM
        yourtable INNER JOIN (
          SELECT   column1, max(column2) max_column2
          FROM     yourtable
          GROUP BY column1) mx
        ON yourtable.column1=mx.column1
           AND yourtable.column2=mx.max_column2
      GROUP BY
        yourtable.column1) s
  )

ここでフィドルを参照してください。

于 2013-02-21T18:29:11.450 に答える
0

削除すると混乱しますが、保持したい行は次のとおりです。

SELECT 
    a.col1, a.col2, b.col3 
FROM
    (select col1, max(col2) as col2 from table1 group by col1) as a INNER JOIN
    (select col1, col2, max(col3) as col3 from table1 group by col1, col2) as b 
    ON 
        a.col1 = b.col1 AND a.col2 = b.col2;

@fthiella で指摘されているように、このクエリに含まれていない行を単純に削除できます。

このリンクを参照してください。

于 2013-02-21T18:32:32.893 に答える