- 締切済み
年月で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 という結果です。 宜しくお願いいたします。
- sunnys
- お礼率95% (176/185)
- その他(データベース)
- 回答数1
- ありがとう数2
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- FlossenEngel
- ベストアンサー率77% (132/170)
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;
関連するQ&A
- SQLのこと:distinctして並び替えたい
select * from (select distinct on (aaa) * from bbb) as ccc order by ddd テーブルbbbのaaaというフィールドが重複せず、しかも他のフィールドで並び替えをしたかったら、このような書き方以外ありますか?データベースはPostgreSQLです。 この書き方で不都合が出ているというわけではありませんが、どう書けば、パフォーマンス的にも良いSQLになるか、詳しい方がいらっしゃいましたら、お願いします。
- ベストアンサー
- PostgreSQL
- accessでDISTINCT 句と矛盾
IIFで置き換えをした結果をソートしようとしましたが、 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,c [Microsoft][ODBC Microsoft Access Driver] ORDER BY 句 (c) が DISTINCT 句と矛盾しています。 というエラーになりました。 正しいSQLを教えてください。 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,b も試しましたが同じようにエラーになりました。
- ベストアンサー
- その他(データベース)
- DISTINCTで選択した項目以外でのソート
お世話になります。 SQLサーバ2000から、SQLサーバ2008への移行を行っております。 以下のようなSQL文は2000では許容されていたようで、問題なく(?)稼働していただのですが2008に移行したら軒並みエラーになってしまいました。 エラーで稼働確認が進まないので、修正方法を検討しているのですが、まだSQLサーバが使えない環境で確認ができません。 2000が来てから確認する予定ではありますが、以下の通りで新旧・同様のソート順になると考えて問題ございませんでしょうか。 教えていただけると幸甚です。 【例1】 SELECT DISTINCT ISNULL(T1.C1,""),T1.C2 FROM T1 ORDER BY T1.C1 →ORDER BY 項目を ISNULL(T1.C1,"")に変更 【例2】 SELECT DISTINCT T1.C1,T1.C2 FROM T1 ORDER BY T1.C1,T1.C3 →ORDER BY 項目から T1.C3 を削除する 以上です。宜しくお願いいたします。
- 締切済み
- SQL Server
- 複数のテーブルからデータを取得したい
1つのテーブルから重複したデータを取り除いて表示するときに使う 【select distinct カラム名 from テーブル名;】 がありますよね。 それと同じようなことを複数のテーブルをまたいで行いたいのですがうまくいきません。 ちなみに両方のテーブルのカラム名は同じです。 【select distinct カラム名 from テーブル1 union select distinct カラム名 from テーブル2;】 としても重複を取り除いた後にテーブルを結合してるので結果的に両テーブルの重複した値を取り除くことができず。 そこで 【select distinct T1.カラム名, T2.カラム名 from テーブル1 T1. テーブル2 T2;】 としてみたのですが、クエリを実行中のまま反応がないので悩んでます。 ちなみに2つのテーブルのデータはそれぞれ2万件ほどです。 こういう時どういうsql文を組むのが正しいのでしょうか?
- ベストアンサー
- MySQL
- Select Distinctについて
SQL文の質問です。フィールドがTable1に100つあるとします。 select distinct XYZ From Table1という文があるとします。 これだとXYZのフィールドしか参照していないことになると思います。 そうではなくて、他の99フィールドの値も参照(データにアクセスしたい)したいと思っています。 select distinct XYZ, * From Table1とSelect * from Table1みたいなことをやりましたがエラーが発生しました。他の99フィールドを参照する方法はあるでしょうか?
- ベストアンサー
- その他(データベース)
- DISTINCTの使い方について
--------------------------------- 元データ --------------------------------- ID CATEGORY CREATE_DATE 001 A100 2008/10/01 002 B100 2009/01/01 003 C100 2009/01/01 004 A100 2009/02/01 005 B100 2009/02/01 006 A100 2009/03/01 --------------------------------- --------------------------------- 出力したい形式 --------------------------------- ID CATEGORY CREATE_DATE 003 C100 2009/01/01 005 B100 2009/02/01 006 A100 2009/03/01 --------------------------------- 「CATEGORY」でユニークになるようにしたいと思っています。 重複しているものは、最新のデータ(CREATE_DATEが新しいもの)を 優先して取得したいと思っています。 ============================= SELECT DISTINCT(CATEGORY) CATEGORY, ID, CREATE_DATE FROM TABLE_NAME ORDER BY CREATE_DATE DESC ============================= というSQLを書いてみましたが、「CATEGORY」でユニークになって くれません。 また「CREATE_DATEが新しいもの」という点はORDER BY で行えば 良いのでしょうか? 以上、よろしくお願いいたします。
- ベストアンサー
- Oracle
- SQL文「DISTINCT」の「ORDER BY」について
SQL文「DISTINCT」の「ORDER BY」について教えて下さい。 A列をDISTINCTで重複行の排除をしています。 その後、B列でORDER BYをかけたいのですが、エラーが 出てしまいます。A列でのORDER BYは成功します。 何か良い方法があれば教えて下さい。 よろしくお願いします。 SQL="SELECT DISTINCT A列 from table " &_ "WHERE (table.C列='100') " &_ "ORDER BY (table.B列) ASC " ⇒エラー "ORDER BY (table.A列) ASC " ⇒成功
- ベストアンサー
- SQL Server
- Distinct使用時に0除算エラーが起こる
初めて投稿します。よろしくお願いします。 現在、VB6とアクセス97で構築されたシステムのメンテナンスを行なっています。下記SQLの実行時に0で除算しましたのエラーが出ます。 select * from [ SELECT DISTINCT NO FROM 指示書]. AS NOリスト order by iif(NO = "0", 9999999 ,NO) 色々試してみましたが解決方法が見つからないので質問しました。 ちなみに、アクセス内で"SELECT DISTINCT NO FROM 指示書"というクエリを作成し実行しておくとエラーが出ずに正常に動作します。 よろしければ、ご教授よろしくお願いします。
- ベストアンサー
- SE・インフラ・Webエンジニア
- oracle9i distinct
select distinct 1 as aaa, bbb from table_a aaa bbb -------------------------- 1 a 1 b 1 c この場合の「distinct 1」というのは table_aの1列目でdistinctするという 意味でいいのでしょうか? でもdistinct 2 とすると、aaaの列の値が2になるだけなのですが・・。 すみませんがdistinct 1 の意味を教えていただけますでしょうか。
- ベストアンサー
- その他(データベース)
- GROUP BY と DISTINCT
SQLPLUSにおいて、ある表X1(code1,code2)に (A,1),(A,1),(A,2),(A,2),(A,3),(A,3) (B,4),(B,4),(B,5),(B,5),(B,6),(B,6) というデータがあり、別の表X2(data1,data2)に (1,10),(2,20),(3,30),(4,40),(5,50),(6,60) というデータがある場合に(X2の左の要素はprimary) 結果として(A,60),(B,150)というデータを得たいのですが、GROUP BY や DISTINCT を使おうするとエラーになってしまいうまくいきません。 <select code1,sum(data2) from X1,X2 where distinct(X1.code2) = X2.data1 group by code1> みたいな感じでやりたいのですが、(distinctがこの使い方でできないのはわかってます)どうしたらいいでしょうか? ちなみに副問合せを使って先にX1から(A,1),(A,2)...(B,6)をセレクトしようとしてもダメでした。 説明がわかりづらくて申し訳ございませんがどなたか詳しい方のアドバイスをお願い致します
- ベストアンサー
- Oracle
お礼
アドバイスありがとうございます。 Oracleの場合、select句で選択していない列でもorder byに指定する事が可能なのですが、PostgreSQLは違うのでしょうか? PostgreSQLはほとんど触った事が無いので。。 試しにエイリアスをつけてみましたがやはりダメでした。 ちなみにto_char(DDATE,'YYYYMM')でgroup by しても値は返ってきませんでした。 何か良い方法は無いでしょうか。