- ベストアンサー
急募「セレクトしてセレクト」
教えてください 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をつくるので限界です 誰か助けてください。 どうか教えてください
- みんなの回答 (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)
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 )
- chukenkenkou
- ベストアンサー率43% (833/1926)
RDBMSは、ここのカテゴリ通りSQL Serverですか? もしSQL Serverなら、2005以降でしょうか?
補足
DBはMYSQLです。 言い忘れましたがroomtypeはSS、SDだけではなく、 SS,SD,TS,TD,SWと5つあります。 今回は20080921から20080927までの間にSSとSDしかデータがなかったために2つしかでてきていません。 もしかしたらSSしかとってこれないときもあれば、SS,TS、SWの3つが取れてくるときもあります。