dポイントプレゼントキャンペーン実施中!

教えてください
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をつくるので限界です
誰か助けてください。
どうか教えてください

A 回答 (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
    • good
    • 0

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 )
    • good
    • 0

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つが取れてくるときもあります。

補足日時:2008/09/21 06:09
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!