C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

SQLのDistinct句に関して


(過去ログ 8 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■7888 / inTopicNo.1)  SQLのDistinct句に関して
  
□投稿者/ くし&しも 二等兵(4回)-(2006/10/29(Sun) 18:38:32)

分類:[C#] 


分類:[C#] 

いつもお世話になります。

例えば下記のようなテーブルがあるとします。
Primary Key はcode_aとnoとno_edaです。
そこでcode_aとno毎にno_edaが古い番号のデータを取得するとします。
よって、結果からいえば下記テーブルから「○」がついたレコードを取得したいのですが、一発で取得するようなSQLがどうもうまく作れませんでした。
ちなみに全ての列のデータを取得します。

SELECT DISTINCT code_a, no FROM tbl_A だったら重複行は絞れますが、no_edaもnameも取得できません。
又、SELECT DISTINCT code_a, no, no_eda FROM tbl_A だったら逆にcode_a, no,no_edaで一意となるので本来の意図したデータを取得できなく、
nameも取得できません。

テーブル名:tbl_A
------------------------------------
code_a | no | no_eda | name |    ← 列名
------------------------------------
000 | 0000 | 0 | あ  |  
------------------------------------
000 | 0000 | 1 | い |
------------------------------------
000 | 0000 | 2 | う |  ○
------------------------------------
000 | 0001 | 0 | お |  
------------------------------------
000 | 0001 | 1 | か |  ○
------------------------------------
100 | 0000 | 0 | き |  
------------------------------------
100 | 0000 | 1 | く |  ○

もし一度に取得するようなSQLが作れるとしらお手数ですが教えてください!

環境等はWindows XP, Visual Studio2005, Oracle10g ,C# です。
以上よろしく御願い致します。

0
引用返信 編集キー/
■7890 / inTopicNo.2)  Re[1]: SQLのDistinct句に関して
□投稿者/ ひろえむ 二等兵(16回)-(2006/10/29(Sun) 21:31:47)
ひろえむ さんの Web サイト

分類:[C#] 

いろいろと方法はありますが・・・

select *
from tbl_A as A
left join (
select
code_a,
no,
Max(no_eda) as max_no_eda
from tbl_A
group by
code_a, no) as B
on
A.code_a = B.code_a
and
A.no = B.no
where
B.code_a is not null

て感じでしょうか。 試していないのでわかりませんが(^^;;

SQLは苦手なので、もしかしたらもっといい方法があるのかもしれません(^^;;;

0
引用返信 編集キー/
■7891 / inTopicNo.3)  Re[2]: SQLのDistinct句に関して
□投稿者/ ひろえむ 二等兵(17回)-(2006/10/29(Sun) 21:37:09)
ひろえむ さんの Web サイト

分類:[C#] 

No7890に返信(ひろえむさんの記事)

ああ、肝心なところがぬけてますね(^^;

select * from tbl_A as A
left join (
select
code_a,
no,
Max(no_eda) as max_no_eda
from tbl_A
group by
code_a, no) as B
on
A.code_a = B.code_a
and
A.no = B.no
and
a.no_eda = B.max_no_eda
where
B.code_a is not null

ですかね(^^;

0
引用返信 編集キー/
■7895 / inTopicNo.4)  Re[1]: SQLのDistinct句に関して
□投稿者/ 夏椰 二等兵(1回)-(2006/10/30(Mon) 01:26:29)
夏椰 さんの Web サイト

分類:[C#] 

No7888に返信(くし&しも さんの記事)
> いつもお世話になります。
>
> 例えば下記のようなテーブルがあるとします。
> Primary Key はcode_aとnoとno_edaです。
> そこでcode_aとno毎にno_edaが古い番号のデータを取得するとします。
> よって、結果からいえば下記テーブルから「○」がついたレコードを取得したいのですが、一発で取得するようなSQLがどうもうまく作れませんでした。
> ちなみに全ての列のデータを取得します。
>
> SELECT DISTINCT code_a, no FROM tbl_A だったら重複行は絞れますが、no_edaもnameも取得できません。
> 又、SELECT DISTINCT code_a, no, no_eda FROM tbl_A だったら逆にcode_a, no,no_edaで一意となるので本来の意図したデータを取得できなく、
> nameも取得できません。
>
> テーブル名:tbl_A
> ------------------------------------
> code_a | no | no_eda | name |    ← 列名
> ------------------------------------
> 000 | 0000 | 0 | あ  |  
> ------------------------------------
> 000 | 0000 | 1 | い |
> ------------------------------------
> 000 | 0000 | 2 | う |  ○
> ------------------------------------
> 000 | 0001 | 0 | お |  
> ------------------------------------
> 000 | 0001 | 1 | か |  ○
> ------------------------------------
> 100 | 0000 | 0 | き |  
> ------------------------------------
> 100 | 0000 | 1 | く |  ○
>
> もし一度に取得するようなSQLが作れるとしらお手数ですが教えてください!
>
> 環境等はWindows XP, Visual Studio2005, Oracle10g ,C# です。
> 以上よろしく御願い致します。

簡単にいうと
code_a、no毎でno_edaが最大値を持つレコードを取得したいってことですかね?
#古いno_edaというのが最大値のno_edaという意味なのかな?と思ったので
#確認させていただきました。

Oralceなので以下のSQLがかけますね。
#ここは集計関数のMAXです。
select * from table_a where (code_a, no, no_eda) in
(
select code_a, no, max(no_eda) from table_a group by code_a, no
) ;

またはお題にあるDISTINCTを使うとして以下のパターンもかけますね。
#ここでは分析関数のMAXを使用しています。
select * from table_a where (code_a, no, no_eda) in
(
select distinct code_a, no, max(no_eda) over (partition by code_a, no ) from table_a
) ;



0
引用返信 編集キー/
■7912 / inTopicNo.5)  Re[2]: SQLのDistinct句に関して
□投稿者/ ひろえむ 二等兵(18回)-(2006/10/30(Mon) 15:55:53)
ひろえむ さんの Web サイト

分類:[C#] 

おお。 私も一緒に勉強になりました(^o^;

0
引用返信 編集キー/
■7928 / inTopicNo.6)  Re[3]: SQLのDistinct句に関して
□投稿者/ くし&しも 二等兵(6回)-(2006/10/31(Tue) 01:33:05)

分類:[C#] 

夏椰さん!ありがとうございます。

in句に複数の項目を指定できたり、partition byなど 初めて知りました。

又、ひろえむさん!もありがとうございます。参考にさせていただきます。

お二方ともありがとうございました。


0
引用返信 編集キー/
■7929 / inTopicNo.7)  Re[4]: SQLのDistinct句に関して
□投稿者/ くし&しも 二等兵(7回)-(2006/10/31(Tue) 01:33:33)

分類:[C#] 

No7928に返信(くし&しも さんの記事)
> 夏椰さん!ありがとうございます。
>
> in句に複数の項目を指定できたり、partition byなど 初めて知りました。
>
> 又、ひろえむさん!もありがとうございます。参考にさせていただきます。
>
> お二方ともありがとうございました。
>

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -