こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

年月でdistinctしたい(PostgreSQL)

PostgreSQLでdistinctの使い方についての質問です。

t_mainのDDATEカラム(DATE)に
DDATE
============================
20030929
20030930
20031001
20031002



というデータが入っています。
このデータのうち、年月でdistinctした
データが欲しいので、以下のようにSQLを組みました。
===========================================
select distinct substring(DDATE from 1 for 6) from t_main order by DDATE
これでは値が取得できなかったので、次に
===========================================
select distinct TO_CHAR(DDATE,'YYYYMM') from t_main order by DDATE
としましたが、これも値が返ってきません。

上手に年月でdistinctできる方法を教えてください。
欲しいのは
========
200309
200310
という結果です。
宜しくお願いいたします。

投稿日時 - 2003-10-05 14:52:31

QNo.671909

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

substring(DDATE from 1 for 6)は日付表示形式に依存するのでおいといて…。
order byでDDATE順にせよと指定されているけれどもselect項目にDDATEがありません。あるのはDDATEをto_charで加工した結果の文字列項目です。なので、その文字列項目をorder byに指定します。
select distinct to_char(DDATE,'YYYYMM') as ym from t_main order by ym;

投稿日時 - 2003-10-05 19:03:03

お礼

アドバイスありがとうございます。
Oracleの場合、select句で選択していない列でもorder byに指定する事が可能なのですが、PostgreSQLは違うのでしょうか?
PostgreSQLはほとんど触った事が無いので。。
試しにエイリアスをつけてみましたがやはりダメでした。

ちなみにto_char(DDATE,'YYYYMM')でgroup by しても値は返ってきませんでした。
何か良い方法は無いでしょうか。

投稿日時 - 2003-10-05 20:54:18

あなたにオススメの質問