0

次のテーブルがあります

Actions: actionID, time, type
States: stateID, time, type

アクションが実行された時点での現在の状態を調べる必要があります。

だから私は次のようなものから始めました

SELECT actions.actionID, states.stateID
FROM actions, states
WHERE states.time < actions.time

これにより、特定のアクションが発生する前に存在していたすべての状態を含む結果テーブルが得られます。しかし、アクションの前の LAST 状態だけが必要です。

したがって、max(states.stateID) に基づく何らかの GROUP BY が必要ですが、正直なところ、これを解決する方法がわかりません。

編集

したがって、アクションテーブルにこれが含まれている場合:

actionID  time                   type
1         '2012-10-30 02:05:00'  100
2         '2012-10-30 02:11:00'  200

そして状態テーブルにはこれが含まれています:

stateID  time                   type
11       '2012-10-30 02:00:00'  A
12       '2012-10-30 02:10:00'  B
13       '2012-10-30 02:15:00'  A

次の結果が欲しいです。

actionID  stateID
1         11          // Because before action 1, the state that prevailed was 11
2         12          // Because before action 2, the state that prevailed was 12
4

1 に答える 1

2

これを試して:

select t.actionID,t.stateID,a.type action_type,s.type state_type  from 

(SELECT actions.actionID,max(states.stateID) stateID
FROM actions, states
WHERE states.time < actions.time
group by actions.actionID)as t

join 

actions a on t.actionID=a.actionID

join

states s on t.stateID=s.stateID

SQL フィドルのデモ

于 2012-10-30T07:07:35.503 に答える