- 締切済み
重複データを含む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文を使ったりするのでしょうか。 内部結合などイマイチ理解できていないためよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- stork
- ベストアンサー率34% (97/285)
件数だけ取得するんじゃなくて データを取得したいんじゃないのかな? 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列
- cotae_bb
- ベストアンサー率53% (51/95)
件数だけでよいのなら SELECT COUNT(*) FROM( SELECT COUNT(*) FROM TABLE GROUP BY b, c )T1 これで8件という結果が得られます。
補足
回答ありがとうございます。 件数を出そうとしましたが、SQLがエラーになりました。 また、 select count(distinct t2.bc) from ( select b+c as bc,* from table1 ) as t2 こんな感じかと思ったのですが、これだと日付の判別ができていません… もうちょっとだと思うのですが…
お礼
ありがとうございます。データを取得することができました。 件数はcountを使えば取得できますでしょうか?