1

繰り返しの 1 つで最小要件 (x<15) が満たされている場合に、データセットからブロック全体を削除しようとしています (以下のサンプル データを参照)。

+------+-------+------------+----+
| id   | block | repitition | x  |
+------+-------+------------+----+
| 5223 | 1     | 1          | 15 |
| 5223 | 1     | 2          | 17 |
| 5223 | 1     | 3          | 16 |
| 5223 | 2     | 1          | 14 |
| 5223 | 2     | 2          | 15 |
| 6238 | 2     | 1          | 18 |
| 6238 | 2     | 2          | 20 |
| 6238 | 2     | 3          | 12 |  
| 6238 | 2     | 4          | 21 |
| 7575 | 1     | 3          | 13 |
| 7575 | 1     | 4          | 21 |
| 7575 | 1     | 5          | 21 |
+------+-------+------------+----+

この点で、私はすでに次のことで助けられました。

delete t1
from your_table t1
inner join
(
    select id, block
    from your_table
    group by id, block
    having sum(x < 15) > 0
) t2 on t1.id = t2.id and t1.block = t2.block

そして、これは完全に機能します。私が知りたいのは、まったく同じことができるかどうかですが、繰り返し数に関係なく、ブロック内の最初の繰り返しが x < 15 の場合のみです。

したがって、テーブルにクエリを実行して、行 4、5、10、11、12 のみを削除させたいと思います。現在の式では、行 6、7、8、および 9 も削除されます。

4

1 に答える 1

0
delete t4
from your_table t4
inner join
  (select id,block From YourTable t1
    inner join 
    (  
       select id,block,min(repitition) as FirstRepitition 
       From YourTable Group By id,Block 
    ) t2
    On t1.id = t2.id and t1.block = t2.block 
    and t1.Repitition = t2.FirstRepition and t1.x < 15
  ) t3 
  On t4.id = t3.id and t4.block = t3.block

一通りだろう。最も古い繰り返しを見つけ、x < 15 の繰り返しを取得してから、そのロットを削除します。めんどくさいけど…

于 2013-09-05T15:03:52.027 に答える