• ベストアンサー

急募「セレクトしてセレクト」

教えてください SELECT stayday,roomtype ,sum(roomnum) AS sumroom from details WHERE stayday >= '20080921' and stayday <= '20080927' GROUP BY stayday,roomtype ; 結果 +----------+----------+---------+ | stayday | roomtype | sumroom | +----------+----------+---------+ | 20080921 | SD | 22 | | 20080921 | SS | 22 | | 20080922 | SD | 15 | | 20080922 | SS | 15 | | 20080922 | TS | 15 | | 20080923 | SD | 15 | | 20080923 | SS | 15 | | 20080923 | TS | 15 | +----------+----------+---------+ ここからSD、SSのsumroomの最大値をとってこれるようなSQLは作れますか? +----------+----------+---------+ | stayday | roomtype | sumroom | +----------+----------+---------+ | 20080921 | SD | 22 | | 20080921 | SS | 22 | --------------------------------- 最終的に↑のようにしたいのです。 しかしわたしには一番上のSQLをつくるので限界です 誰か助けてください。 どうか教えてください

質問者が選んだベストアンサー

  • ベストアンサー
  • springjoe
  • ベストアンサー率100% (3/3)
回答No.3

SELECT roomtype, MAX(sumnum) AS Expr1 FROM (SELECT TOP (100) PERCENT stayday, roomtype, SUM(roomnum) AS sumnum FROM Test_Room WHERE (CONVERT(Varchar(10), stayday, 111) BETWEEN '2008/09/21' AND '2008/09/23') GROUP BY stayday, roomtype ORDER BY stayday) AS derivedtbl_1 WHERE (roomtype IN ('SD', 'SS')) GROUP BY roomtype ORDER BY roomtype

その他の回答 (2)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

select stayday,roomtype ,sumroom from ( SELECT stayday,roomtype ,sum(roomnum) AS sumroom from details s WHERE stayday >= '20080921' and stayday <= '20080927' and roomtype in ('SD', 'SS' ) GROUP BY stayday,roomtype ) s where not exists ( select 1 from ( select stayday,roomtype ,sum(roomnum) AS sumroom from details WHERE stayday >= '20080921' and stayday <= '20080927' and roomtype in ('SD', 'SS' ) GROUP BY stayday,roomtype ) t where s.roomtype=t.roomtype and s.sumroom < t.sumroom )

回答No.1

RDBMSは、ここのカテゴリ通りSQL Serverですか? もしSQL Serverなら、2005以降でしょうか?

bankensan
質問者

補足

DBはMYSQLです。 言い忘れましたがroomtypeはSS、SDだけではなく、 SS,SD,TS,TD,SWと5つあります。 今回は20080921から20080927までの間にSSとSDしかデータがなかったために2つしかでてきていません。 もしかしたらSSしかとってこれないときもあれば、SS,TS、SWの3つが取れてくるときもあります。

関連するQ&A