• 締切済み

重複データを含むSQL抽出方法

sqlserver2008で、以下のようなテーブルから、全体のレコード件数を取得したいと思います。 但し条件として、 ・b列とc列が重複しているものは、d列の最新の日付のものを残す。 ・b列が同じものはそのままカウント ・c列が同じものはそのままカウント a列|b列 |c列 |d列 ---------------------------- 1|host1 |100 |2010/10/01 2|host2 |101 |2010/10/01 3|host3 |102 |2010/08/01 4|host3 |102 |2010/10/01 5|host4 |104 |2010/10/01 6|host5 |104 |2010/10/01 7|host5 |105 |2010/09/01 8|host6 |106 |2010/08/01 9|host6 |106 |2010/10/01 10|host7 |107 |2010/10/01 上記の条件実行し、以下のような結果(件数)を求めたい場合どのようなSQLになりますでしょうか。 a列|b列 |c列 |d列 結果(8件) ---------------------------- 1|host1 |100 |2010/10/01 ○ 2|host2 |101 |2010/10/01 ○ 3|host3 |102 |2010/08/01 4|host3 |102 |2010/10/01 ○ 5|host4 |104 |2010/10/01 ○ 6|host5 |104 |2010/10/01 ○ 7|host5 |105 |2010/09/01 ○ 8|host6 |106 |2010/08/01 9|host6 |106 |2010/10/01 ○ 10|host7 |107 |2010/10/01 ○ select文の中にselect文を使ったりするのでしょうか。 内部結合などイマイチ理解できていないためよろしくお願いします。

みんなの回答

  • stork
  • ベストアンサー率34% (97/285)
回答No.2

件数だけ取得するんじゃなくて データを取得したいんじゃないのかな? select TAB.* from TABLE as TAB inner join (select b列,c列,max(d列) as d列 from TABLE group by b列,c列) as NST on TAB.b列 = NST.b列 and TAB.c列 = NST.c列 and TAB.d列 = NST.d列

aquareat
質問者

お礼

ありがとうございます。データを取得することができました。 件数はcountを使えば取得できますでしょうか?

  • cotae_bb
  • ベストアンサー率53% (51/95)
回答No.1

件数だけでよいのなら SELECT   COUNT(*) FROM(   SELECT     COUNT(*)   FROM     TABLE   GROUP BY     b, c )T1 これで8件という結果が得られます。

aquareat
質問者

補足

回答ありがとうございます。 件数を出そうとしましたが、SQLがエラーになりました。 また、 select count(distinct t2.bc) from ( select b+c as bc,* from table1 ) as t2 こんな感じかと思ったのですが、これだと日付の判別ができていません… もうちょっとだと思うのですが…

関連するQ&A