- ベストアンサー
SQL文で日付のユニーク且つ降順に取得する方法
- Oracle8iで、3つの表から日付をユニーク且つ降順に取得するSQL文を教えてください。
- 表A(T_TESA)、表B(T_TESB)、表C(T_TESC)には日付があります。これらの表から、日付をユニーク且つ降順に取得する方法を教えてください。
- 結果は、以下のようになります: - 2006/02/04 - 2006/02/03 - 2006/02/02 - 2006/02/01 - 2006/01/30
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
多分これでいけると思うのですが....(検証していませんごめんなさい) SELECT DISTINCT IDATE FROM ( SELECT T_TESA_IDATE AS IDATE FROM T_TESA UNION SELECT T_TESB_IDATE AS IDATE FROM T_TESB UNION SELECT T_TESC_IDATE AS IDATE FROM T_TESC ) ORDER BY IDATE DESC 補足として、T_TESA/B/C_IDATEの値の分布とレコード数によっては、T_TESA/B/C_IDATEにインデックスを貼っていないと、クエリ実行に時間がかかるかもしれません。
その他の回答 (2)
- erupi1973
- ベストアンサー率75% (27/36)
インデックスを付ける文法としては、 CREATE INDEX (インデックス名) ON テーブル名(列名, 列名...); です。この場合だと例えば、 CREATE INDEX IDX_T_TESTA_IDATE ON T_TESTA(T_TESTA_IDATE); で良いと思います。 インデックスを付けると、テーブルへのINSERT時に、インデックスを生成する分だけパフォーマンスが落ちることにご注意下さい。
- 7colors
- ベストアンサー率25% (29/114)
DATE型とあるが、日付しか記載されていないので以下は同じ時間が記録されているものと考えます。 SELECT A.IDATE FROM ( SELECT T_TESA_IDATE FROM T_TESA UNION SELECT T_TESB_IDATE FROM T_TESB UNION SELECT T_TESC_IDATE FROM T_TESC) A ORDER BY A.IDATE DESC; こんな感じかな。 UNIONは重複行を出さないので、DISTINCTはなくていいと思う。 (未検証)
お礼
早速のご回答ありがとうござます 誠に恐れ入りますが、 No1さんの補足欄に追記いたしました件につきまして ご存知でしたらご教示の程よろしくお願いいたします
お礼
ありがとうございます チャレンジしてみます 誠に恐れ入りますが、下記 表の場合のインデックス の付け方をご教示ください CREATE TABLE T_TESA ( T_TESA_SLOTNO VARCHAR2(7), T_TESA_NO VARCHAR2(1), T_TESA_BIKOU VARCHAR2(100), T_TESA_IDATE DATE, T_TESA_UDATE DATE, CONSTRAINT T_TESA_SLOTNO_PR PRIMARY KEY T_TESA_SLOTNO) ) TABLESPACE TS_SEISAN; --インデックス-- ?? --パーミッション-- 以下略