テストされていませんが、SQL のみを使用したこのようなもの:
MERGE INTO your_table dst USING ( SELECT ROW_NUMBER() OVER ( PARTITION BY tDate, Product, Price, Quantity, BuySell ORDER BY ID ) AS idx, COUNT( CASE BuySell WHEN 'Buy' THEN 1 END ) OVER ( PARTITION BY tDate, Product, Price, Quantity ) AS num_buy, COUNT( CASE BuySell WHEN 'Sell' THEN 1 END ) OVER ( PARTITION BY tDate, Product, Price, Quantity ) AS num_sell FROM your_table ) src ON ( src.ROWID = dst.ROWID AND src.idx <= LEAST( src.num_buy, src.num_sell ) ) WHEN MATCHED THEN UPDATE SET Status = 'Matched';
プレ>