2

私はこのようなテーブルを持っています...

mysql> select * from billing_order_history;
+----------+---------------+--------------+---------------------+
| order_id | modify_action | new_order_id | modified_by_user_id |
+----------+---------------+--------------+---------------------+
|       52 |             2 |           54 |                   1 | 
|       54 |             2 |           55 |                   1 | 
|       55 |             2 |           56 |                   1 | 
+----------+---------------+--------------+---------------------+
3 rows in set (0.00 sec)

古いオーダー ID は、新しいオーダー ID に関連付けられます。52 >> 54 >> 55 >> 56

元の注文 ID が 52 の場合、最新の注文 ID、つまり 56 を返す必要があります。

where 句に b.order_id = 52 を追加すると機能しない次の自己結合を記述しました。

select max(a.new_order_id) from billing_order_history as a inner join billing_order_history as b on a.order_id = b.new_order_id 

スキーマとサンプル レコード:

 CREATE TABLE billing_order_history (
  order_id bigint(20) ,
  modify_action int(11) ,
  new_order_id bigint(20) ,
  modified_by_user_id bigint(20) 
) ;
insert into billing_order_history values (52, 2, 54, 1), (54, 2, 55, 1), (55,2,56,1);
4

3 に答える 3

3

あなたはこれを試すことができます:

select max(latest)
from (
Select @latest:=case when @latest=order_id then new_order_id else @latest end
   as latest from billing_order_history, (select @latest:=55 ) as t
order by order_id) as t1;
于 2013-04-15T08:41:24.467 に答える
1

私の最後の情報は、MySQL はまだ再帰クエリをサポートしていないということでした。2011 年 12 月、この投稿では PostgreSQL または Sybase のいずれかを参照していました。

残りのオプションは、空の結果が得られるまで、プログラミング言語から SQL クエリを繰り返すことです。

于 2013-04-15T07:54:06.007 に答える