誰かが私にトリッキーなSQLの問題についての手がかりを教えてもらえますか?私は同様の問題を検索しましたが、最も近いアプローチはこれに見えましたが、それは私の問題の解決策ではありません: Oracle-レコードのペア間のグループ化
これはPL/SQLプロシージャで実現できることは知っていますが、この場合(Oracle)SQLが必要です。プレーンテーブルのID=4および5の特別なレコードを分離するためのOracleSQLSELECTを探しています。このテーブルは、IDとDATEの2つの列のみで構成されています。次のようなデータが含まれています。
ID DATE REMARK (this row is not part of table!)
--------------- ------------------------------------------
2 01-JAN-2013
4 02-JAN-2013 A
7 03-JAN-2013
5 05-JAN-2013 A
6 07-JAN-2013
4 08-JAN-2013 B
1 11-JAN-2013
5 12-JAN-2013 B
... more follows
ID 4と5のグループは、それぞれが時間内に続く場合、一緒に属します。したがって、「A」とマークした行は一緒に属します。「B」についても同じことが言えます。2つのAsと2つのBは、日付が連続しているため、一緒に属します。ここで取得したいのは、4つの列を返すSELECTです。つまり、1つの行に2つの行Aがあり、1つの行に行Bがあります。
したがって、出力は次のようになります。
ID4 DATE4 ID5 DATE5 Comment (no column, just comment)
--------------------------------- ------------------------------------
4 02-JAN-2013 5 05-JAN-2013 First set of 4 and 5
4 08-JAN-2013 5 12-JAN-2013 Second set of 4 and 5
...more follows
(列ID4とID5はもちろん、デモンストレーションの目的で廃止されています)
私は自分自身を理解できるようにしたいと思いますか?誰かアイデアがありますか?
更新:あなたのアイデアと選択に感謝します、私の質問をするのに十分に明確でなかったことを残念に思います。4と5のペアのみを考慮し、日付の昇順でのみ考慮してください。上記の例では、AlexPoolとFlorinGhitaのソリューションは素晴らしいです、ありがとう!
4erの日付は、5erの日付以下である必要があります。一致するパートナーがない4erまたは5erがある場合、それは無視できます。
しかし、ここに実際のデータと落とし穴のある別のサンプルがあります(ソリューションはここで失敗します):時間の順序でデータをウォークスルーすると、2つの行があり、5つが連続して続きます。
4 16.03.2012 17:49:28 A
5 10.05.2012 09:38:56 A1 Either A1 is possible
5 12.06.2012 07:51:03 A2 or A2 whichever is easier to code
4 12.06.2012 08:47:52 B
5 02.08.2012 11:27:43 B
4 03.08.2012 13:24:54 C
5 03.08.2012 14:14:07 C
4 04.08.2012 15:00:00 should be ignored, as there is no following 5er
必要な出力:
4 16.03.2012 17:49:28 5 10.05.2012 09:38:56 (alternat.: 5 12.06.2012 07:51:03)
4 12.06.2012 08:47:52 5 02.08.2012 11:27:43
4 03.08.2012 13:24:54 5 03.08.2012 14:14:07
提案されたSELECTSは、4erが5erより前にある必要があることを考慮していないため失敗します。対応するパートナーがない場合は、この行を無視してください。申し訳ありませんが、私は自分自身を十分に明確にしていませんでした。
フリードヘルムありがとうございます