タイトルが十分説明できない場合は、ご容赦ください。ここ
は私の問題のシナリオです:前のレコードに対して条件付きでデータを計算するクエリ
私は、次の列(アップ製)を持つテーブルがある:
oid rev state time
1 0 S T1
2 0 S T2
1 0 A T3
2 0 A T4
2 1 MS T5
2 1 MA T6
2 1 M T7
2 2 MS T8
2 2 M T9
時間列がvarchar型(日付/時刻を含む)
である私が見つける必要があります。 - 状態から状態へ遷移する各注文にかかる時間は、有効な状態遷移は次のように定義されています
S->A
MS->MA
MS-M
(すなわち、移行は、ACKに提出する修正から得ることができます-submit to modify-ackまたはmodify-submitted to modified) とMSからMAとMへの移行が可能ですが、この場合はMSからMAへの移行にのみ関心があります。上記で
:
oid 1 transitioned from S to A.
oid 2 changed from S to A (rev 0)
oid 2 changed from MS to MA (rev 1) - here we don't want to consider transition to M
oid 2 changed from MS to M (rev 2)
(timeTakenはmillisecsであろう)以下のようにクエリ出力は次のようになります
oid rev timeTaken state
1 0 (T3-T1) A
2 0 (T4-T2) A
2 1 (T6-T5) MA
2 2 (T9-T8) M
したがって、現在のレコードの状態は、MAまたはMの時間差である場合前回のレコード状態がMSの場合にのみ計算する必要があります(これは、oid、rev、timeで指定されているものとします)。現在のレコード状態がMの場合は、前のレコード状態がMAの場合はスキップします。
これは、mysqlのsqlクエリを使用して実行する必要がありますか。任意のポインタが役立ちます。ありがとう。
====
テーブルにはプライマリキーとして時刻があります。
私は(それがどのような方法で助けている場合)、それは正しい方法で注文を取得するには、このクエリを持って
OID、REVを選択し、状態、オーダーから時間受注コード、時間によっては、その意志
を吹け与える:
OID REV状態時間
1 0 S T1
1 0 A T3
2 0 S T2
2 0 A T4
を2 1 MS T5
2 1 MA T6
2 1 M T7
2 2 MS T8
2 2 M T9
この役立つだろうか?
質問、元のテーブルに何らかの自動インクリメントIDがある場合、これははるかに簡単です。それは? –
と時刻がソートされていると仮定できますか? –
私は正しい方法で注文するためにこのクエリを持っています: –