2016-10-13 9 views
0

を超える参加:ITEM(ID、GROUP)とSTATEが(ID、STATE)SQLは、私は2つのテーブルを持っている論理的な順序に

Tables

私は必要なものの中にすべてのアイテムを返す、単一のSQLクエリです以前の項目の状態が「完了」から「開く」に変更されました。前のアイテムは、同じグループ内で最も小さい小さいIDを持つアイテムとして定義されます。

例では、グループ 'A'にあり、Id = 1の前のアイテムが状態 'Done'にあったため、Id = 2が結果として期待されます。

+0

[tag:rdbms]は何を使用していますか? – Mureinik

+1

状態テーブルに2行以上の行があるのはなぜですか? – dfundako

+0

私はOracleを使用しており、状態テーブルの名前は完全ではありません.ITEM_STATEである必要があります。 – StefanG

答えて

1

一つの方法は、existsを使用しています...私は多くの方法を試してみましたが、私は完全に立ち往生しています。これはほとんど問題文の直接の翻訳である:

select i.* 
from items i join 
    state s 
    on i.id = s.id 
where s.state = 'OPEN' and 
     exists (select 1 
       from items i2 join 
        states s2 
        on i2.id = s2.id 
       where s2.state = 'DONE' and i2.grp = i.grp and s2.id < s.id 
      ); 

だけトリッキーな部分は、外部クエリとサブクエリの両方で一緒にテーブルを持ってjoin秒が必要です。

関連する問題