0

私はこのテーブルを持っています:

| DAY | TRIMESTER |

Dayは整数値であり、常に増加します(0日目から経過する秒数をカウントします)。TRIMESTERには、文字列値('FIRST'、'SECOND'、'THIRD'など)が含まれています。学期のリストを正しい順序で取得する必要があります。

SELECT DISTINCT TRIMESTER FROM table

戻り値:

| TRIMESTER |
|   FIRST   |
|   THIRD   |
|   SECOND  |

私はこれが私の問題を解決すると評価しました:

SELECT  DISTINCT TRIMESTER, SUM(DAY) FROM table GROUP BY TRIMESTER ORDER BY SUM(DAY)

必要なものを出力し、データベースによるコンピューティングの必要性が少なくなる、より優れたソリューションはありますか?データベースはOracle11gであり、テーブルは非常に大きくなるはずです。

サンプルデータ:

| DAY | TRIMESTER |
|  0  |  FIRST    |
|  10 |  FIRST    |
|  12 |  FIRST    |
|  20 |  FIRST    |
|  30 |  SECOND   |
|  35 |  SECOND   |
|  46 |  THIRD    |

「FIRST」、「SECOND」、「THIRD」の順に並べる必要があります。とにかく、私はTRIMESTER列のキーを制御できません。それらは文字列であり、任意の文字列である可能性があります。名前で並べ替えることはできません。私はそれらがDAY値の「範囲」をカバーしていることを知っているだけです。たとえば、例で「DAY」の値が31〜34の場合、それらはすべて、トリメスター列に「SECOND」の値があります。

4

2 に答える 2

1

使用GROUP BY

select TRIMESTER 
from MyTable 
group by trimester 
order by max(DAY)

SQLフィドルの例#1

RANKおよびを使用するPARTITION

SELECT TRIMESTER
FROM (
  SELECT TRIMESTER,
  RANK() OVER (partition by TRIMESTER ORDER BY DAY DESC) DAYRANK
  FROM MyTable)
WHERE DAYRANK = 1;

SQLフィドルの例#2

于 2012-08-16T15:28:36.723 に答える
0

これはそれを行う必要があります:

SELECT   TRIMESTER
FROM     MY_TABLE
GROUP BY TRIMESTER
ORDER BY MIN (DAY);
于 2012-08-16T16:04:32.770 に答える