3

次の結果を取得するために、pl/sql でクエリを作成しようとしています。

データ:

Id     |     Date       |  Request
1      |     10/09/10   |  111
2      |     09/09/10   |  100
3      |     13/09/10   |  111
4      |     01/08/10   |  222
5      |     08/07/10   |  100
6      |     06/07/10   |  111
7      |     04/07/10   |  100
8      |     01/06/10   |  222

次の結果を得るには:

Id     |     Date       |  Request
8      |     01/06/10   |  222
4      |     01/08/10   |  222
7      |     04/07/10   |  100
2      |     09/09/10   |  100
5      |     08/07/10   |  100
6      |     06/07/10   |  111
1      |     10/09/10   |  111
3      |     13/09/10   |  111

Ps: この例では、日付の形式は (dd/mm/yy) です。

例でわかるように、最初に日付で並べ替えますが、最初の行をキャッチすると、同じリクエストを持つすべての行をリストし、同じリクエストを持つ行を終了すると、日付で並べ替えます...

誰でもこのクエリで私を助けることができますか? いくつかの方法を試しましたが、期待した結果は得られませんでした。

4

1 に答える 1

8

分析を使用できます:

SQL> WITH data AS (
  2     SELECT 8 id, to_date('01/06/10') dat, 222 req FROM DUAL
  3     UNION ALL SELECT 4, to_date('01/08/10'), 222  FROM DUAL
  4     UNION ALL SELECT 7, to_date('04/07/10'), 100  FROM DUAL
  5     UNION ALL SELECT 2, to_date('09/09/10'), 100  FROM DUAL
  6     UNION ALL SELECT 5, to_date('08/07/10'), 100  FROM DUAL
  7     UNION ALL SELECT 6, to_date('06/07/10'), 111  FROM DUAL
  8     UNION ALL SELECT 1, to_date('10/09/10'), 111  FROM DUAL
  9     UNION ALL SELECT 3, to_date('13/09/10'), 111  FROM DUAL
 10  )
 11  SELECT ID, dat, req
 12    FROM DATA
 13   ORDER BY MIN(dat) over (PARTITION BY req), req, dat;

        ID DAT                REQ
---------- ----------- ----------
         8 01/06/2010         222
         4 01/08/2010         222
         7 04/07/2010         100
         5 08/07/2010         100
         2 09/09/2010         100
         6 06/07/2010         111
         1 10/09/2010         111
         3 13/09/2010         111
于 2012-12-05T13:05:54.207 に答える