1

次のように、DB テーブルに 3 つの列があります。1.START_TIME 2.END_TIME 3.INDEX_NO

Sample records below

INDEX_NO                END_TIME                        START_TIME                      
------------- ------------------------------- -------------------------------
I152         13-JAN-14 02.30.00.000000000 AM 13-JAN-14 12.10.00.000000000 AM 
I151         13-JAN-14 05.30.00.000000000 AM 13-JAN-14 03.15.00.000000000 AM 
I152         20-JAN-14 02.30.00.000000000 AM 20-JAN-14 12.10.00.000000000 AM 
I151         20-JAN-14 05.30.00.000000000 AM 20-JAN-14 03.15.00.000000000 AM  

上記の結果セットから、レコードの とMIN(START_TIME)MAX(END_TIME)抽出する必要がありますINDEX_NOMIN(START_TIME)

To summarize the expected output is as follows.

INDEX_NO                END_TIME                        START_TIME                      
    ------------- ------------------------------- -------------------------------
    I152         20-JAN-14 05.30.00.000000000 AM 13-JAN-14 12.10.00.000000000 AM 

上記の抽出を行うための最小限のコストでクエリを実行できる人はいますか?

私はオラクル11gを使用しています。

4

2 に答える 2

3

ここでFIRST関数が役に立ちます。

select min(index_no) keep(dense_rank first order by start_time),
       max(end_time),
       min(start_time)
from mytab;

ここでデモ。

于 2013-10-23T06:42:55.473 に答える
-1

最小時間と最大時間を見つける内部クエリを作成することから始めます。次に、テーブルから正しいフィールドを選択するクエリを作成し、min_time フィールドを使用して内部クエリと結合します。

同じ最小開始時間の行が複数ある場合、これにより複数の行が生成されます。

SELECT 
    mt.INDEX_NO,
    mt.START_TIME,
    t."max_time"
FROM MyTable mt
JOIN
(
SELECT
    min(START_TIME) as "min_time",
    max(END_TIME) as "max_time"
FROM MyTable
) t
ON mt.START_TIME = t."min_time"
;
于 2013-10-23T06:36:27.280 に答える