次は私が次のような結果にテーブル内の各エントリの入り口と出口のレコードを選択する
F_ID R_ID DATE Col_A Col_B Col_C
12 158 20161008 01 01 99 - Entry record
12 158 20161022 99 01 10 - Exit Record
12 160 20161006 01 99 01 - Entry record
12 160 20161017 99 01 10 - Exit Record
17 167 20161013 99 01 01 - Entry record
17 167 20161020 02 01 10 - Exit Record
17 174 20161010 99 01 01 - Entry record
17 174 20161017 99 99 10 - Exit Record
For each F_ID, R_ID:
When Col_A or Col_B = '01' and Col_C <>'10' - **It is an entry record**
When Col_C = '10' - **It is an exit record**
ロジックを得るようにすることを選択したい、私は
F_ID R_ID DATE Col_A Col_B Col_C
12 158 20161008 01 99 99
12 158 20161012 01 01 99
12 158 20161019 01 02 10
12 158 20161022 99 01 10
12 160 20161006 01 99 01
12 160 20161011 99 01 99
12 160 20161017 99 01 10
17 167 20161013 99 01 01
17 167 20161016 99 02 99
17 167 20161020 02 01 10
17 174 20161010 99 01 01
17 174 20161012 01 02 11
17 174 20161017 99 99 10
を持つテーブルからのサンプルでありますここで私は以下のように労働組合を使用してと思ってい
1. Select the earliest entry record
**and**
2. Select the latest exit record for each F_ID, R_ID
...
ですSelect * from tbl1 T
where
T.Col_C = '10' and
T.DATE = (select max(T2.DATE) from tbl1 T2
where
T2.Col_C = '10' and
T2.R_ID = T.R_ID
T2.F_ID = T.F_ID
)
union
Select * from tbl1 K
where
(K.Col_A = '01' or K.Col_B = '01') and
K.Col_C <> '10' and
K.DATE = (select min(K2.DATE) from tbl1 K2 where
(K2.Col_A = '01' or K2.Col_B = '01') and
K2.Col_C <> '10' and
K2.R_ID = K.R_ID
K2.F_ID = K.F_ID
)
しかし、私が自己結合を使って同じテーブルで行ったように、ユニオンを使用すると、私にガベージデータが返されます。
を> ' 01''と '' Col_B <> '01''''と '' Col_C <>' 10''''のどちらかです。これはエントリーでも出口レコードでもないので、これは何ですか?このようなレコードをスキップするだけですか? –
"ガベージデータ"とはどういう意味ですか?私の意見では、クエリは大丈夫です。 'ORDER BY'節はもちろん役立ちます。そして、あなたが排除しなければならない重複がないので、 'UNION'はあまり意味がありません。代わりに 'UNION ALL'を使用してください。 –
Col_A <> '01'とCol_B <> '01'とCol_C <> '10' - この条件はまだエントリレコードとして数えることができます – Hemansh