値が

2016-07-01 2 views
0

例は、値が

SELECT * FROM stats_table 
order by accuracy desc, totals desc; 

これは精度DESCによって順序付けされるが、

DESC合計前の行よりも小さい場合、次の行を削除し、それは私がしたい以下

id col_a  amount col_b  accuracy totals 
881 stat_a  38.0 stat_b  71.60  162 
884 stat_a  39.0 stat_b  70.52  173 
109 stat_a  38.0 stat_b  69.91  105 
880 stat_a  38.0 stat_b  69.88  249 
883 stat_a  39.0 stat_b  69.47  262 

を返します精度と合計が上記の行よりも低い場合は行が削除されます。したがって、この例では、id 109は精度として削除され、合計は上の行よりも低くなります。id 884

だから、1000行であるとして、それはテーブル全体をループすべきで、理想的には、この

id col_a  amount col_b  accuracy totals 
881 stat_a  38.0 stat_b  71.60  162 
884 stat_a  39.0 stat_b  70.52  173 
880 stat_a  38.0 stat_b  69.88  249 
883 stat_a  39.0 stat_b  69.47  262 

ように終わる必要があります。

あなたは行番号を割り当てることができます説明している方法でそれを行うには

+2

このサンプルデータの順序をどのように定義しますか? – Blank

+0

それは正確なdesc、合計のdescで注文されています –

+0

私たちに期待する結果を(そのテーブルのデータで)見せてください。 – jarlh

答えて

0

を助けてください:

select * 
from stats_table 
where id in (
    select a.id 
    from (SELECT *, row_number()over(order by accuracy desc, totals desc) as row FROM stats_table) a 
    inner join (SELECT *, row_number()over(order by accuracy desc, totals desc) as row FROM stats_table) b 
    on a.row = b.row + 1 
    and a.accuracy < b.accuracy 
    and a.total < b.total 
) 

は、次に、あなただけのときに幸せ「から削除」で「*選択」を置換する必要があります削除したい行が選択されていることがわかります(明らかな理由でコードをテストできません)。

+0

返信ありがとう、私はSQL構文でエラー1064を取得しています。 –

+0

@ Vorpulus:mysqlにはウィンドウ関数がありません。恐れがあります。 – joop

+0

ああ。私が考えることができるのは、[identity column](http://stackoverflow.com/questions/14753321/add-auto-increment-id-to-existing-table)だけです。がんばろう。 –